2010-08-13 14 views
10

Mam pytanie z zapytaniem HQL i hibernacji.HQL: Hibernacja zapytania z ManyToMany

Mam klasę użytkownika i rolę klasy. Użytkownik może mieć wiele ról. Więc mam relatation ManyToMany takiego:

w klasie użytkownika:

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

w klasie Rola:

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

To odwzorowanie stworzył 3rd tabeli (PORTAIL_USERROLE), gdzie relacje są zaopatrzone. Wszystko działa dobrze w ten sposób. Kiedy mam użytkownika, pobieram role.

Ale moje pytanie brzmi: w zapytaniu HQL, w jaki sposób mogę uzyskać wszystkich użytkowników, którzy mają określoną rolę? Każda klasa reprezentuje tabelę PORTAIL_USERROLE, więc nie wiem, jak utworzyć moje zapytanie HQL.

+3

kiedy Pascal Thivent edytować to pytanie Zmienił JoinTable do oinTable i un kapitalizowane doskonale ważne zdanie przed usunięciem "Dziękuję" od końca. Poważnie, o co chodziło, sprawiło, że pytanie stało się mniej czytelne? –

Odpowiedz

18

ten powinien zrobić:

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

Wielkie dzięki. Nie sądziłem, że hibernate zarządza wieloma takimi ludźmi. – Kiva

+0

To tylko linq nie jest? – Gage

+0

dzięki temu mi też pomaga –

2

można użyć @WhereJoinTable tak:

@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 + "'") 
Powiązane problemy