0
我有两个使用多对多关联映射到彼此的User和Role类。现在我试图使用Hibernate Criteria API来查询所有没有特定角色的用户。但我有点卡住了。使用Hibernate Criteria API查询实体没有特定值的多对多关联
要查询具有特定角色的用户,请使用以下查询,该查询工作得很好。
Session session = getSessionFactory().getCurrentSession();
Criteria mainCrit = session.createCriteria(boClass);
return mainCrit.createAlias("roles", "r").add(Restrictions.eq("r.name", roleName)).list();
现在我有点困惑如何扭转查询并获取所有没有特定角色的用户。如果可能的话,我希望明确排除某个角色,并且不要查询所有使用OR链接角色的角色,因为可能会动态添加更多角色。
UPDATE
为了更好地了解我的情况下,你可以看到我试图在another question查询的关联。
此外,我还会补充说,Role类的name属性是一个Enum,不知道这是否重要,或者更改查询数据库的方式。
遗憾的是它并没有为我工作。无论是标准还是HQL版本。我试图查询关联形式[这个问题](http://stackoverflow.com/questions/7248668/hibernate-many-to-many-association-left-hand-side-collection-contains-elements/7249604# 7249604)。问题出在我改变了我的社团之后,就像你在回答这个问题时所建议的那样。我在这个问题中提到查询具有某个角色的用户的查询不再起作用。不,我完全困惑我做错了什么。 – Flo
更明确。你的意思是“不起作用”?它会产生错误吗? SQL是否正确生成?它返回什么? –
不,它不会产生错误。首先更改了行'roleName.setProjection(Projections.id());'到'roleOfUserWithName.setProjection(Projections.id());'。我的测试场景:我创建了3个用户和2个角色(Admin,User)。第一个用户获取管理员角色,第二个用户获取这两个角色,最后一个用户获取用户角色。然后我将用户添加到关联(角色)的另一侧并保存所有对象。所以对于这种情况,查询应该返回没有管理员角色的用户。所以在这种情况下,只有具有用户角色的最后一个用户应该被返回。但查询返回的列表是空的。 – Flo