DetachedCriteria userCriteria = DetachedCriteria.forClass(User.class, "u");
DetachedCriteria roleCriteria = userCriteria.createAlias("user_role", "r");
userCriteria.add(Restrictions.eq("u.name", "abc"));
userCriteria.add(Restrictions.eq("u.deptid", "124"));
roleCriteria.add(Restrictions.eq("r.roleid", new Long(1)));

解决方案 »

  1.   


    DetachedCriteria roleCriteria = userCriteria.createAlias("user_role", "r");的user_role是表名不是实体类,确定可以这么用么,我这边没弄通
      

  2.   

    尝试在user里定义role,然后去查询
      

  3.   

    User实体类里面有roles属性,因为多对多关系,roles是Set类型的,怎么过滤roles里面有id为指定值的User集合
      

  4.   

    解决啦,用
    detachedCriteria.add(Restrictions.sqlRestriction(roleId + "in (select ROLE_ID from user_role where USER_ID=this_.USER_ID)"));
    this_ 是User没有起别名的情况下hibernage自动添加的别名