制作一个休眠条件,返回子列表中具有相同对象的所有对象

时间:2014-05-09 20:41:51

标签: java hibernate criteria hibernate-criteria

我的问题是:

我有一个包含特定对象列表的类,我需要返回其列表包含我作为param传递的特定子列表的所有类对象。 例如:

class A{

List<Object> b;
}

Criteria criteria = getSession().createCriteria(A.class, "a");
criteria.createAlias("a.b", "b");
criteria.add(Restrictions.in("b.name", new String[]{"name 1","name 2"}))
return criteria.list();

但是,这会两次返回A类的同一个对象。 感谢。

1 个答案:

答案 0 :(得分:2)

你需要使用Subqueries.exists()来获取至少有一个具有特定特征的孩子的所有父对象,尝试这样的事情。

Criteria criteria = getSession().createCriteria(A.class, "a1");
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

DetachedCriteria detachedCriteria = DetachedCriteria.forClass(B.class, "b");
detachedCriteria.createAlias("b.a", "a2");
detachedCriteria.add(Restrictions.eqProperty("a1.id", "a2.id"));
detachedCriteria.add(Restrictions.in("name", new String[]{"name 1","name 2"}))

criteria.add(Subqueries.exists(detachedCriteria));
return criteria.list();