This code
criteria.add(Restrictions.in("crmUser.id", selectedIds));
works because of the CrmLog table's CrmUser id as a foreign key column. Therefore, Hibernate does not need to add connections to the SQL query.
To add a restriction to other CrmUser properties, you need to add an alias. This alias tells Hibernate to add a connection to the SQL query.
criteria.createAlias("crmUser", "user"); criteria.add(Restrictions.in("user.groupId", filterGroupIds));
by default, Hibernate adds an internal join. For left connection
criteria.createAlias("crmUser", "user", JoinType.LEFT_OUTER_JOIN); criteria.add(Restrictions.in("user.groupId", filterGroupIds));
JoinType.LEFT_OUTER_JOIN can be used with Hibernate 5 (possibly Hibernate 4)
You can assign an alias to the root object. Perhaps such an example is clearer.
Criteria criteria = session.createCriteria(CrmLog.class, "log"); criteria.createAlias("log.crmUser", "user"); criteria.add(Restrictions.in("user.groupId", filterGroupIds));
source share