0

My problem is:

I have a class that contains a specific list of objects and I need to return all the class objects whose list contains a specific sublist that I passed as param. For example:

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();

But, this returns the same object of class A twice. Thanks.

Mikko Maunu
  • 41,366
  • 10
  • 132
  • 135

1 Answers1

2

You need to use Subqueries.exists() to fetch all parent objects which have at least one child with specific characteristics, try something like this.

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();
Zahid M
  • 1,033
  • 10
  • 10