2010-08-06 3 views
3

I ont la classe suivante:collections scalaires de requête dans HQL

class User { 
String username; 
@CollectionOfElements 
private Set<String> roles = new HashSet<String>(); 
[many more things here] 
} 

Et je veux écrire une requête HQL qui récupère le nom d'utilisateur et les rôles pour tous les utilisateurs.

Query query = session.createQuery("select distinct u.username, u.roles from User u"); 

Mais cela ne fonctionne pas, il jette l'exception suivante:

org.hibernate.QueryException: not an entity [select distinct u.username,u.roles from com.eyeprevent.domain.users.User u] 

plaignez que u.roles est pas une entité.

Comment puis-je réaliser ce que je veux? (Demander where u.roles='arole' serait également possible mais encore une fois, cela ne fonctionne pas).

Répondre

2

Vous cherchez ceci:

select u.username 
    from User u 
where :role in elements(u.roles) 
+0

Peut-être que cela pourrait fonctionner. Je vais l'essayer lundi. Merci. Comment puis-je sélectionner les rôles d'un utilisateur? Peut-être 'choisir u.username, les éléments (u.roles) de l'utilisateur u'? – pakore