1

Hibernate Criteria Query を使用して、子オブジェクトのリストで親オブジェクトをクエリしたいと思います。子の ID を使用してそれを行う方法は知っていますが、エンティティを直接使用することはありません。

これは機能します:

List<Long>  listOfChildLongChildIds = new ArrayList<Long>();
listOfChildLongChildIds.add(new Long(1));
listOfChildLongChildIds.add(new Long(2));

Criteria criteria = getSession().createCriteria(Parent.class);
Criteria criteriaChilds = criteria.createCriteria("childs");
criteriaChilds.add(Restrictions.in("id", listOfChildLongChildIds));

ただし、リストに次のような子オブジェクト/エンティティが含まれている場合、これを行う方法は次のとおりです。

List<Child>  listOfChildEntities = new ArrayList<Child>();
listOfChildEntities.add(QueryChildFromDatabse);
listOfChildEntities.add(QueryChildFromDatabse);

(これは、子の ID を使用せず、エンティティ自体のみを使用することを意味します。そうしないと、子のリストを繰り返し処理し、すべての ID を抽出して、不要である可能性が最も高いと思われるリストに入れる必要があるためです。しかし、エンティティリスト自体でクエリを実行する方法に関する情報を見つけることができませんでした):

次に、上記のコードを使用して

criteriaChilds.add(Restrictions.in("id",listOfChildEntities));

例外をスローします:

子は java.lang.Long にキャストできません

4

2 に答える 2

6

私はあなたが次のようなことをすることができるはずだと思います:

Criteria criteria = getSession().createCriteria(Parent.class);
criteria.createCriteria("childs","childs");
criteria.add(Restrictions.in("childs.id", listOfChildLongChildIds));
于 2012-11-27T12:54:05.647 に答える
1

オブジェクトをRestrictions.inメソッドに渡すことができるはずです。

Restrictions.in("childs", <childObjectslist>)
于 2012-04-16T06:28:42.443 に答える