[英]Criteria, how to access a subclass property
很奇怪我找不到一些簡單的東西,我有2個實體,一個在另一個內部,我的問題是如何從子實體訪問一個屬性?
實體1
@Getter
@Setter
@Entity
public class ObjectA{
String name;
String surname;
ObjectB B;
}
實體2
@Setter
@Getter
@Entity
ObjectB{
String family;
String range;
}
我想要的是通過標准搜索訪問familly和range,所以我做了這個:
public List<ObjectA> search(String name, String surname, String family, String range) {
Criteria c = HibernateUtil.getSessionFactory().getCurrentSession().createCriteria(ObjectA.class, "a");
if (!name.equals("")) {
c.add(Restrictions.eq("a.name", name));
}
if (!surname.equals("")) {
c.add(Restrictions.eq("a.surname", surname));
}
if (!family.equals("")) {
c.add(Restrictions.eq("a.B.family", family));
}
if (!range.equals("")) {
c.add(Restrictions.eq("a.B.range", range));
}
return c.list();
}
可以訪問姓名和姓氏,但家庭和范圍不能。 '無法解決財產問題'我該怎么辦?
謝謝= D.
您必須為子類屬性創建別名才能訪問它。
請查看以下手冊的第15.4節http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querycriteria.html
在你的情況下,我不確定你需要別名。 要在子實體上請求,您需要在子實體上創建條件,然后在其上添加參數:
public List<ObjectA> search(String name, String surname, String family, String range) {
Criteria aCriteria = HibernateUtil.getSessionFactory().getCurrentSession().createCriteria(ObjectA.class);
if (!name.equals("")) {
aCriteria.add(Restrictions.eq("name", name));
}
if (!surname.equals("")) {
aCriteria.add(Restrictions.eq("surname", surname));
}
Criteria bCriteria = aCriteria.createCriteria("B");
if (!family.equals("")) {
bCriteria.add(Restrictions.eq("family", family));
}
if (!range.equals("")) {
bCriteria.add(Restrictions.eq("range", range));
}
return aCriteria.list();
當心:在aCriteria.createCriteria("B")
將讓這個唯一的ObjectA
具有非對象null
B將被退回,所以你可能要創建的子標准只有family
和range
不為空。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.