2010-01-16 29 views
8

Maviden hazırda beklemede “IllegalArgumentException: argüman türü uyuşmazlığı” almaya başladım. Hazırda bekleme durumu oldukça uzun bir süredir çalışıyordu ve svn günlükleri, kodun bozulmadan doğrulandığını doğruladı.IllegalArgumentException: Hazırda bekletme türü uyuşmazlığı Hazırda bekletme

Durum nasıl olabilir?
İşte nedeniyle (örneğin zaman damgasına tarihi gibi) temel veritabanı alan değişikliklere istisna

Jan 16, 2010 10:47:09 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet Faces Servlet threw exception 
java.lang.IllegalArgumentException: argument type mismatch 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:42) 
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:337) 
    at org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:200) 
    at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3566) 
    at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:129) 
    at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:854) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:729) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236) 
    at org.hibernate.loader.Loader.doList(Loader.java:2220) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104) 
    at org.hibernate.loader.Loader.list(Loader.java:2099) 
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338) 
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172) 
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121) 
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79) 
    at org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:930) 
    at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419) 
    at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374) 
    at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:921) 
+1

Veritabanı tablosunda herhangi bir değişiklik var mı? –

+0

İlgisiz değişiklikler, evet –

+0

Yine de, bu değişikliklerden herhangi birinin çakıştığını görmek için .hbm dosyalarınızı incelemek isteyebilirsiniz? – Sands

cevap

8

Çeviri: Hazırda bekletme yöntemini çağırmaya çalışırken, hazırda bekletme yanlış türden bir argüman sağlar.

İlk adımım, hangi ayarlayıcının (örneğin, uygulamanın tutulmasında hata ayıklama, bir özel durum kesme noktası belirleme ve kesme noktasına ulaşıldığında yığın değişkenlerini denetleme) olduğunu bulmak olacaktır.

Düzenleme: Eşlenen özelliği qs için ayarlayıcının imzası nedir? Set<Q> almalıdır.

+0

Haklısınız. Hatalı bir tipti. Set yerine liste –

3

Bu olay duymuştum bir parçası. Veritabanını değiştirip test edemiyorsanız ya da Sands'in önerdiği gibi .hbm veya ek açıklamaları kontrol ediyorsanız, veritabanı değişikliklerini geri almaya değebilir.

+0

@Kaleb u r sağ. Bu kodun hbm'ye eklenmesi bu hatayı oluşturdu: 'Neden olabileceğine dair bir fikriniz var mı? –

3

Yani, Varlığı değiştirmeden hazırda bir eşleme dosyası değiştirdiniz? qs özelliğinin zaten orada olduğunu tahmin ediyorum. Ama bu bir java.util.Set mu (<set> - map your collection kullanıyorsunuz)?

1

Çözüm, sorgunuzun yürütme işleminde "addScalar" ifadesinin kullanılmasıdır.

@Entity 
@Table(name="user") 
@DynamicUpdate(value=true) 
public class UserEntity implements Serializable{  

@Id @GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name="id",updatable=false) 
private Long id; 

@Column(name="name",nullable=false,length=20) 
private String name; 
.... 
} 

yerine yapıyor:

List<UserEntity> users = sessionFactory.getCurrentSession() 
     .createQuery(query) 
     .list(); 

Kullanım addScalar:

List<UserEntity> users = sessionFactory.getCurrentSession() 
    .createQuery(query) 
    .addScalar("id",LongType.INSTANCE) 
    .addScalar("name",StringType.INSTANCE)   
    .list(); 

Not: önce LongType.INSTANCE için, orada

sizin Varlığı varsayalım

bir kullanıcı Hibernate.LONG ve Hibernate.STRING (kullanımdan kaldırıldı) şimdi).

İlgili konular