实体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();
}
可以访问姓名和姓氏,但家庭和范围不能。 '无法解决财产' 我该怎么办?
thanks = D
答案 0 :(得分:5)
您必须为子类属性创建别名才能访问它。
请查看以下手册http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querycriteria.html
的第15.4节答案 1 :(得分: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
个对象,因此您可能只想在{family
时创建子条件{1}}和range
不为空。