我想用一个标准搜索我的数据库。在多个字段上进行示例,或者一起进行。也就是说,我想检索其中" 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?
答案 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))
);