HQL how to query ElementCollection of String

2019-02-10 08:27发布

问题:

I have class like

public User{
   Long id;
   Set<String> roles;
}

How do I query all User objects with the role of "ADMIN"

EDIT:

I'm using Hibernate 3.0.5. And have tried most of the obvious approaches.

from Users where roles in('ADMIN') gives a JDBC error. from Users u where u.roles in('ADMIN') gives a class cast exception

I think this may be a problem with this particular version of hibernate.

回答1:

You can use the query below

"from User as user where user.id in (select user.id from Role as role left join role.user as user where role.name = 'ADMIN')"


回答2:

I've found solution:

"from User as user where 'ADMIN' in elements(user.roles)";

Somehow hql function value() have to help with this, you can also experiment with it, but that hql query above works for me.



回答3:

This should do it:

session.createQuery("from User where roles in ('ADMIN')");