【问题标题】:Hibernate: Criteria Query child objects (associations) by Entity (not Id)Hibernate:Criteria 按实体(不是 Id)查询子对象(关联)
【发布时间】:2012-04-16 05:51:38
【问题描述】:

我想使用 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

【问题讨论】:

    标签: java hibernate jpa criteria-api


    【解决方案1】:

    我认为您应该能够执行以下操作:

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

    【讨论】:

    • 错误:索引处缺少 IN 或 OUT 参数:: 4。任何线索?
    【解决方案2】:

    您应该能够将对象传递给 Restrictions.in 方法。

    Restrictions.in("childs", <childObjectslist>)
    

    【讨论】:

    • 非常感谢您的回答!但问题是(至少在我的测试中,您的建议失败了!?)您命名为“childs”的参数必须是(根据文档)子对象的属性/成员。当我通过 ID 查询时,它必须以某种方式是一个身份证。我需要的是这样的声明: Restrictions.idIn();您的答案是否基于任何特殊文档?但无论如何感谢您的回答。
    • 错误:索引处缺少 IN 或 OUT 参数:: 4。任何线索?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2012-03-07
    • 2011-06-05
    • 1970-01-01
    • 2017-02-03
    • 2016-07-12
    相关资源
    最近更新 更多