我的问题是:
我有一个包含特定对象列表的类,我需要返回其列表包含我作为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类的同一个对象。 感谢。
答案 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();