2017-01-03 18 views
0

基準でデータベースを検索したいのですが、複数のフィールドの例をORしてみましょう。つまり、 "field1"が検索オブジェクトの例であるレコードを検索したい、または "field2"が検索オブジェクトの例です.field1とfield2はトップレベルオブジェクトの子であり、それぞれが同じ型です私の検索オブジェクトとして。Hibernate-基準との不一致QBEの例

私は何をしたいことは選言だけをcriteriにcriteri と協力していないため、動作しません

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

です。

は私が

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

私は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)) 
    ); 
関連する問題