2010-08-13 6 views
10

J'ai une question avec la requête HQL et Hibernate.HQL: requête Hibernate avec ManyToMany

J'ai une classe d'utilisateur et une classe de rôle. Un utilisateur peut avoir plusieurs rôles. J'ai donc relatation de ManyToMany comme ceci:

En classe d'utilisateur:

@ManyToMany(fetch = FetchType.LAZY) 
@oinTable(name = "PORTAIL_USERROLE", joinColumns = { @JoinColumn(name = "USERID", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "ROLE", nullable = false, updatable = false) }) 
public Set<Portailrole> getPortailroles() { 
    return this.portailroles; 
} 

En classe rôle:

@ManyToMany(fetch = FetchType.LAZY) 
@JoinTable(name = "PORTAIL_USERROLE", joinColumns = { @JoinColumn(name = "ROLE", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "USERID", nullable = false, updatable = false) }) 
public Set<Portailuser> getPortailusers() { 
    return this.portailusers; 
} 

Cette cartographie a créé une 3ème table (PORTAIL_USERROLE) où les relations sont approvisionnés. Tout fonctionne bien comme ça. Quand j'ai un utilisateur, je récupère des rôles. Mais, ma question est: dans une requête HQL, comment puis-je obtenir tous les utilisateurs qui ont un rôle spécifique? Toute classe représente la table PORTAIL_USERROLE, donc je ne sais pas comment faire ma requête HQL.

+3

lorsque Pascal Thivent édité à cette question, il a changé joinTable à oinTable et un capitalisé une phrase parfaitement valide avant de supprimer le «Merci» de la fin. Sérieusement, quel était le point, il a rendu la question moins lisible? –

Répondre

18

Cela devrait le faire:

from Portailuser u join u.portailroles r where r.name=:roleName 
+0

Merci beaucoup. Je ne pensais pas que Hibernate gère beaucoup de choses comme ça. – Kiva

+0

C'est juste linq n'est-ce pas? – Gage

+0

merci cela m'aide aussi –

2

vous pouvez utiliser @WhereJoinTable Comme ceci:

@JoinTable(name = "OFFICE_USER_POSITION", joinColumns = { 
     @JoinColumn(name = "user_id", referencedColumnName = "id")}, inverseJoinColumns = { 
     @JoinColumn(name = "POST_ID", referencedColumnName = "id")}) 
@WhereJoinTable(clause = "primary_flag='" + YES + "' and del_flag='" + DEL_FLAG_NORMAL + "'") 
Questions connexes