Here is an example:
DetachedCriteria exampleSubquery = DetachedCriteria.forClass(MyPersistedObject.class) .setProjection(Property.forName("id")) // plus any other criteria... ; Criteria criteria = getSession().createCriteria(ARelatedPersistedObject.class) .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY) .add(Subqueries.propertyIn("myPersistedObjectId", exampleSubquery)));
For multiple subqueries, you can use a logical operator of the type Restrictions.or ():
DetachedCriteria anotherSubquery = DetachedCriteria.forClass(MyPersistedObject.class) .setProjection(Property.forName("id")) // plus any other criteria... ; Criteria criteria = getSession().createCriteria(ARelatedPersistedObject.class) .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY) .add(Restrictions.or( Subqueries.propertyIn("myPersistedObjectId", exampleSubquery), Subqueries.propertyIn("myPersistedObjectId", anotherSubquery)));
Peter Bratton
source share