final Criteria rootCriteria = session. createCriteria ( Company. class , "c" ) . setMaxResults ( maxResult ) . setFirstResult ( firstResult ) ; final DetachedCriteria subQuery = DetachedCriteria. forClass ( Target. class , "t" ) // . add ( Restrictions. eq ( "t.id" , targetId ) ) . add ( Restrictions. eq ( "t.owner.id" , ownerId ) ) // . createAlias ( "t.companies" , "cp" ) // . setProjection ( Projections. property ( "cp.id" ) ) ; final List < Company > companies = rootCriteria. add ( Subqueries. propertyIn ( "c.id" , subQuery ) ) . list ( ) ; OR DetachedCriteria subQuery = DetachedCriteria.forClass(WorkgroupD.class, "wgd") .add(Restrictions.eq("wgd.empId.empId", empId)) .setProjection(Projections.property("workgroupId")); Criteria criteria = sf.getCurrentSession().createCriteria(Mas...