有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate:按实体(非Id)查询子对象(关联)的条件

我想用Hibernate条件查询子对象列表来查询父对象。我知道如何使用child的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));

将引发异常:

Child cannot be cast to java.lang.Long


共 (2) 个答案

  1. # 1 楼答案

    您应该能够将对象传递给限制。在方法中

    Restrictions.in("childs", <childObjectslist>)
    
  2. # 2 楼答案

    我认为你应该能够做一些事情,比如:

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