4

奇怪的是我找不到简单的东西,我有 2 个实体,一个在另一个里面,我的问题是如何从子实体访问属性?

实体 1

@Getter
@Setter
@Entity
public class ObjectA{
    String name;
    String surname;
    ObjectB B;
}

实体 2

@Setter
@Getter
@Entity
ObjectB{
    String family;
    String 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

4

2 回答 2

5

您必须为子类属性创建一个别名才能访问它。

查看以下手册http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querycriteria.html的第 15.4 节

于 2012-07-03T13:20:08.317 回答
2

在您的情况下,我不确定您是否需要别名。要在子实体上请求,您需要在子实体上创建标准,然后在其上添加参数:

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具有非 B 的对象才会返回,因此您可能希望仅在且不为空null时创建子标准。familyrange

于 2012-07-03T13:34:09.643 回答