2010-08-13 24 views
10

Ho una domanda con query HQL e ibernazione.HQL: Hibernate query with ManyToMany

Ho una classe utente e una classe di ruolo. Un utente può avere molti ruoli. Così ho un relatation ManyToMany come questo:

In classe utente:

@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; 
} 

In classe ruolo:

@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; 
} 

Questa mappatura ha creato un terzo tavolo (PORTAIL_USERROLE) in cui sono immagazzinati i rapporti. Tutto funziona bene così. Quando ho un utente, recupero i ruoli.

Ma la mia domanda è: in una query HQL, come posso ottenere tutti gli utenti che hanno un ruolo specifico? Qualsiasi classe rappresenta la tabella PORTAIL_USERROLE, quindi non so come rendere la mia query HQL.

+3

quando Pascal Thivent modificato questa domanda ha cambiato JoinTable a oinTable e un capitalizzato una frase perfettamente valido prima di rimuovere il 'Grazie' dalla fine. Seriamente quale era il punto, ha reso la domanda meno leggibile? –

risposta

18

Questo dovrebbe farlo:

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

Grazie mille. Non pensavo che l'ibernazione gestisse molti milioni di persone così. – Kiva

+0

Questo è solo linq vero? – Gage

+0

grazie anche a me –

2

è possibile utilizzare @WhereJoinTable Ti piace questa:

@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 + "'") 
Problemi correlati