2010-08-13 16 views
10

Ich habe eine Frage mit HQL-Abfrage und Ruhezustand.HQL: Hibernate-Abfrage mit ManyToMany

Ich habe eine Benutzerklasse und eine Rollenklasse. Ein Benutzer kann viele Rollen haben. So habe ich eine ManyToMany relatation wie folgt aus:

In Benutzerklasse:

@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 Rollenklasse:

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

Diese Zuordnung einer dritten Tabelle erstellt hat (PORTAIL_USERROLE), wo Beziehungen sind bestückt. Alles funktioniert gut so. Wenn ich einen Benutzer habe, rufe ich Rollen ab.

Aber meine Frage ist: Wie bekomme ich in einer HQL-Abfrage alle Benutzer, die eine bestimmte Rolle haben? Jede Klasse repräsentiert die PORTAIL_USERROLE-Tabelle, daher weiß ich nicht, wie ich meine HQL-Abfrage machen soll.

+3

wenn Pascal Thivent bearbeitet diese Frage er JoinTable zu oinTable und un aktiviert eine absolut gültige Satz geändert bevor dann das "Danke" vom Ende entfernt wird. Im Ernst, was war der Punkt, es machte die Frage weniger lesbar? –

Antwort

18

Dies sollte es tun:

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

Vielen Dank. Ich habe nicht gedacht, dass Hibernate manyToMany so verwaltet. – Kiva

+0

Das ist nur Linq ist es nicht? – Gage

+0

danke das hilft mir auch –

2

Sie @WhereJoinTable wie diese verwenden:

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