Hibernate Criteria按集合的属性过滤

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

但是我达到了一个复杂的查询来执行,它涉及到一组子对象(它们的类让我们称之为“子”)。 我不得不根据子对象的属性的值来选择根实体(这可以做得非常简单),必须更深入地检查,如果匹配另一个条件,那个子对象(符合一些标准) ,但只限于那个孩子!

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

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值为“foo”的另一个子对象(无论它们是否相同)。 我真正想要的是检索所有包含id为20,attr值为“foo”的子对象的Root对象(所有这些限制都由同一个实体子实现!)。

我试图找到关于这个的信息,但似乎都混淆了!

如果有人能帮助我,我将非常感激!

谢谢大家!

问候!

胜利者。

链接地址: http://www.djcxy.com/p/6323.html

上一篇: Hibernate Criteria Filtering by attributes of collection

下一篇: (N)Hibernate : Search against 2 fields at once