Hibernate Criteria按集合属性过滤

时间:2014-04-07 18:07:21

标签: hibernate criteria

我正在使用hibernate的标准子API来管理前端用户可以执行的动态查询。只要完成过滤,想到根实体的属性(称为“Root”)一切都很好,假设使用别名正确指定了关联路径。

但是我遇到了一个复杂的查询要执行,它涉及一个子对象的集合(其类可以称之为“Child”)。我必须不仅通过子对象的属性的值来选择根实体(这可以做得非常简单),如果匹配另一个标准,则必须更深入并检查该子对象(满足某些条件) ,但仅限于那个孩子!

所以,把它放在更具体的例子上,让我们假设以下声明:

class Root {
    Long id;
    Collection<Child> childs;
}

class Child {
    Long id;
    ValueObject attr;
}

class ValueObject {
    String attribute;
}

当执行查询的时间到来时,这是一个财富线程执行的代码:

Criteria criteria = session.createCriteria(Root.class);
criteria.createAlias("childs","childs");
criteria.createAlias("childs.attr","attr_childs");
criteria.add(Restrictions.eq("childs.id",20L));
criteria.add(Restrictions.eq("childs.attr","foo"));

但是我想要的是,不要匹配包含id为20的子节点的所有Root对象,另一方面,它还包含另一个子节点(如果相同则无关紧要),其attr值为“富”。我真正想要的是检索包含id为20且其attr值为“foo”的子节点的所有Root对象(所有这些限制都由同一个实体子节点完成!)。

我试图找到有关这方面的信息,但似乎都混淆了!

如果有人可以提供帮助,我将非常感激!

感谢所有人!

问候!

胜利者。

0 个答案:

没有答案