簡體   English   中英

標准,如何訪問子類屬性

[英]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將被退回,所以你可能要創建的子標准只有familyrange不為空。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM