hibernate Criteria查询多对多(Set集合)条件筛选

时间:2022-12-23 22:12:25

PO

  1. public class UserPO implements java.io.Serializable {
  2. /** 用户唯一标识ID */
  3. private String id;
  4. /** 状态(在用1停用0) */
  5. private String userStatus;
  6. private Set roles = new HashSet();
  7. ........
  8. }
  1. public class RolePOimplements java.io.Serializable {
  2. /** 角色唯一标识ID */
  3. private String id;
  4. /** 角色级别 */
  5. private Integer roleLevel;
  6. private Set users = new HashSet(0);
  7. ........
  8. }

查询用户userStatus等于1且他的角色Level等于3的用户

  1. DetachedCriteria criteria = DetachedCriteria.forClass(UserPO.class); // org.hibernate.criterion.DetachedCriteria
  2. criteria.add(Restrictions.eq("userStatus", "1"))
  3. .createAlias("roles", "r")
  4. .add(Restrictions.eq("r.roleLevel", new Integer(3)));

criteria.add(Restrictions.eq("userStatus", "1"))

.createAlias("roles", "r")

.add(Restrictions.eq("r.roleLevel", new Integer(3)));

需要注意的是:

获取User时是获得了roles的全部记录集,而不是经过过滤的记录集,相当于User的id获得的完整实例一样