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 回答