Hibernate-与标准分离.QBE中的示例

时间:2017-01-03 21:33:56

标签: hibernate query-by-example

我想用一个标准搜索我的数据库。在多个字段上进行示例,或者一起进行。也就是说,我想检索其中" field1"是我的搜索对象的示例OR" field2"是我的搜索对象的一个​​示例,其中field1和field2是顶级对象的子级,每个对象与我的搜索对象的类型相同。

我想做的是

 Disjunction or = Restrictions.disjunction(); 
 or.add(criteria.createCriteria("field1").add(searchObj));
 or.add(criteria.createCriteria("field2").add(searchObj)); 
 criteria.add(or); 

哪个不起作用,因为Disjunctions只适用于上的标准而不是标准

我试过

 Disjunction or = Restrictions.disjunction(); 
 or.add(Restrictions.eq("field1", searchObj));
 or.add(Restrictions.eq("field2", searchObj));
 criteria.add(or); 

但是这给了我一个关于对象主键的PropertyAccessException,说

 IllegalArgumentException occurred calling getter of [.....].pk

有没有办法在示例条款之间分离QBE?

1 个答案:

答案 0 :(得分:0)

我通过使用DetachedCriteria和子查询解决了这个问题:

DetachedCriteria f1Crit = DetachedCriteria.forClass(SearchObj.class, "field1");
f1Crit.add(searchObj); 
f1Crit.setProjection(Property.forName("id"));

DetachedCriteria f2Crit = DetachedCriteria.forClass(SearchObj.class, "field2");
f2Crit.add(searchObj); 
f2Crit.setProjection(Property.forName("id"));

criteria.add(
    Restrictions.or(
        Subqueries.propertyIn("field1.id", f1Crit),
        Subqueries.propertyIn("field2.id", f2Crit))
    );