2017-10-16 98 views
0

我已经制定了,像这样的类:如何为hibernate OneToMany关系编写hql查询?

class User { 
    @Id 
    private long id; 

    @OneToMany(fetch = FetchType.EAGER,cascade = CascadeType.ALL) 
    Set<UserRole> userRoles; 
} 

class UserRole { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id", unique = true, nullable = false) 
    private int id; 

    @Column(name = "role", nullable = false, length = 45) 
    private String role; 
    } 

我试图查询具有特定角色的用户(在这种情况下,与角色ROLE_ADMIN所有用户),使用下面的查询:

org.hibernate.query.Query<User> userQuery=session.createQuery("from User as mc where mc.userRoles in (from UserRole as ur where ur.role in (:uRoles))",User.class); 
    Set<String> roles = new HashSet<String>(); 
    roles.add("ROLE_ADMIN"); 
    userQuery.setParameterList("uRoles", roles); 
    List<User> admins = userQuery.getResultList(); 

但是,查询没有返回任何结果。

+0

'设置 roles = new HashSet ();'这里有什么角色的用法?而'userRoles'的争论来自哪里? – msagala25

+0

userRoles是一个错字。抱歉。 '设置 roles'包含我在这个特定情况下搜索的所有角色的列表,它只是ROLE_ADMIN,但它可能是ROLE_ADMIN和ROLE_WRITER,例如 – AHAW

回答

0
session.createQuery(
    "from User as user join user.userRoles as userRole where userRole.role in :roles") 
    .setParameter("roles", Arrays.asList("ROLE_ADMIN")) 
    .getResultList(); 
+0

我想使用列表,因为我可能会做类似'Set roles = new HashSet (); roles.add(“ROLE_ADMIN”); roles.add( “ROLE_WRITER”); roles.add(“ROLE_READER”);' – AHAW

+0

@AHAW更新了答案。 – TheKojuEffect