0

データベースを基準で検索したい.複数のフィールドの例、OR'd を一緒に。つまり、"field1" が検索オブジェクトの例であるレコード、または "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 は基準onでのみ機能し、基準aでは機能しないため、これは機能しません。

私は試した

 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 を実行する方法はありますか?

4

1 に答える 1

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))
    ); 
于 2017-01-05T19:27:02.270 に答える