2011-05-23 16 views
5

ile bir sorgu yaparken 'özelliğini çözemedi' Böyle tanımlanan hazırda bir OneToMany ilişki var.
Arama yöntemleri Group.getUsers() ve User.getGroup() düzgün çalışıyor. Ama aynı zamanda sütuna group_id sonra bir sorgu yapmak gerekir:hazırda istisna Kriterleri ve Kısıtlamalar

Criteria criteria = Activator.getDefault().getSQLSession().createCriteria(User.class); 
Criterion c = Restrictions.eq("group_id", 1); // an id of a group 
criteria.add(c); 

Criterion nesne bir yöntem oluşturulur ve bu yüzden, diğer bire birçok tablolar için olabilir veya başka sütun içerebilir getUsers() yöntemini kullanamıyorum.

org.hibernate.QueryException: could not resolve property: group_id of: com.example.User 
    at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:81) 
    at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:75) 
    at org.hibernate.persister.entity.AbstractEntityPersister.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1482) 
    at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:62) 
    and so on ... 

Ne sorun olabilir:

Maalesef, yukarıdaki kod aşağıdaki istisna verir?


Düzenleme: user759837 önerdi değişim (Criterion c = Restrictions.eq("group", 1);) sonra

, ben criteria.list() çağırdığınızda, bu hata mesajını alıyorum: could not get a field value by reflection getter of com.example.Group.id

java.lang.IllegalArgumentException: Can not set java.lang.Long field com.example.BaseModel.id to java.lang.Long 
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source) 
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source) 
    at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(Unknown Source) 
    at sun.reflect.UnsafeObjectFieldAccessorImpl.get(Unknown Source) 
    at java.lang.reflect.Field.get(Unknown Source) 
    at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:59) 
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:227) 
    at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3875) 
    at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3583) 
    at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:203) 
    at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:242) 
    at org.hibernate.type.EntityType.getIdentifier(EntityType.java:456) 
    at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:130) 
    ... 

BaseModel sınıftır

@MappedSuperclass 
public abstract class BaseModel { 

    @Id 
    @GeneratedValue 
    private Long id; 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 
} 

long id ile de denedim, ancak aynı hatadır.


Düzenleme 2: Restrictions.eq("group", {A_GROUP_OBJECT});

o mümkün olabilir: kazma bir sürü sonra

, bu Criterion nesne, parametre olarak değil bir kimliği, bir grup nesneyi alması gerektiğini görünüyor Orada bir kimlik yolluyorum?

cevap

4

Bu iş gibi görünüyor:

Criterion c = Restrictions.eq("group.id", 1); // an id of a group 
+1

+1 Bana da yardımcı oldu, ama neden böyle davranıyor?Hazırda bekar bir kadınım ve belgelere bakmak bana tüm sihrin öğrenmesinin yıllar alacağı izlenimini veriyor. – Rajish

+0

Neden bilmiyorum, ama yardımcı olur =) – hilbert

4

sütun group_id ise ve grup ... Kriter olan özelliğini kullanmalısınız c = Restrictions.eq ("grup", 1); // bir grubun bir kimliği ...

+0

Oohh! Ve tüm kombinasyonları denemek için saatler harcadım ... –

2

DB'nizi DB olarak kullanıyorsanız, bunun nedeni grup_id'in bir anahtar kelime olması olabilir. Bu adı başka bir adla değiştirin ve deneyin.

+0

Hayır, oracle değil ve gerçek sütun ismi 'group_id' bile değil. Bunu değiştirdim, böylece daha net çıktı. –

İlgili konular