通过Hibernate Criteria在列表中查找具有多个唯一元素的对象

时间:2013-02-18 08:51:42

标签: java hibernate criteria

我有一个带有元素列表B的A类。每个B还有一个对象C.我需要做的是找到A的实例,其中至少有两个B实例,其中包含不同的C实例列表。

public class A {
   long id;
   List<B> elements;
}

public class B {
    long id;
    C object;
}

public class C {
    long id;
}

我已经尝试了很多不同的东西,直接比较,创建两个别名,DetachedCriteria,要么我得到0行,我得到每行至少有一个B,或者我得到一个异常。我从来没有得到符合我想要的那一行。

我在这里生气,任何人都知道如何让它发挥作用?

1 个答案:

答案 0 :(得分:0)

与往常一样,一旦我最终放弃并将问题作为一个问题发布,我会在稍后找到解决方案。

Criteria crit = session.createCriteria(A.class, "a");

DetachedCriteria cCount = DetachedCriteria.forClass(A.class, "a2");

cCount.createAlias("a2.elements", "elements2");
cCount.add(Restrictions.eqProperty("a2.id", "a.id");
cCount.setProjection(Projections.countDistinct("elements2.object.id");

crit.add(Subqueries.lt(1L, areaCount);

return (List<A>) crit.list();