2010-08-13 13 views
10

Tengo una pregunta con HQL query e hibernate.HQL: consulta de Hibernación con ManyToMany

Tengo una clase de usuario y una clase de función. Un usuario puede tener muchos roles. Así que tengo una relatation ManyToMany así:

En clase de usuario:

@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 la clase de papel:

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

Esta asignación ha creado una mesa de tercera (PORTAIL_USERROLE), donde se almacenan las relaciones. Todo funciona bien así. Cuando tengo un usuario, recupero roles.

Pero, mi pregunta es: en una consulta HQL, ¿cómo puedo obtener todos los usuarios que tienen un rol específico? Cualquier clase representa la tabla PORTAIL_USERROLE, así que no sé cómo hacer mi consulta HQL.

+3

cuando Pascal Thivent editado esta pregunta cambió joinTable a oinTable y poco capitalizado una oración perfectamente válido antes de eliminar el 'Gracias' desde el final. En serio, ¿cuál era el punto, hacía la pregunta menos legible? –

Respuesta

18

Esto debe hacerlo:

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

Muchas gracias. No pensé que Hibernate maneja muchas cosas así. – Kiva

+0

Eso es solo lo que no es? – Gage

+0

gracias esto me ayuda también –

2

puede utilizar @WhereJoinTable De esta manera:

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