2010-05-25 19 views
5

Sólo una pregunta rápida:cheque JPQL muchos-a-muchos relación

Hay la entidad (por ejemplo, usuario) que está conectado con la relación ManyToMany a la misma entidad (por ejemplo, esta relación se describe la "amistad" y se es simétrico).

¿Cuál es la forma más rápida en términos de tiempo de ejecución para comprobar si el usuario A es un "amigo" del usuario B? La manera "estúpida" sería buscar toda la Lista y luego verificar si el usuario existe allí, pero obviamente esa es la sobrecarga.

estoy usando JPA 2

Aquí está el código de ejemplo:

@Entity 
@Table(name="users") 
public class UserEntity { 
    @ManyToMany(fetch = FetchType.LAZY) 
    private List<UserEntity> friends; 

    .... 
} 

Respuesta

6

Si no desea recuperar toda la lista, ¿qué pasa con el uso de un MEMBER OF? Algo como esto:

SELECT user FROM UserEntity user WHERE :friend MEMBER OF user.friends 

Eso les daría a todas las personas que tienen a B como amigo. Si desea restringir los resultados a A solo, agregue una condición en la cláusula WHERE.

No estoy seguro de que sea la mejor manera de lograr lo que quiere. El enfoque "tonto" no parece tan tonto en realidad.

+0

¡Gracias! Esto es exactamente lo que necesito. ¿Podría sugerir también cómo modificar la consulta si: amigo es el id, no la referencia de la entidad? Me disculpo por la simple pregunta, pero estoy un poco perdido en JPQL :-) – Juriy

+0

No importa :-) ya se ha encontrado. – Juriy

+0

@Juriy ¿puede compartir la solución que encontró? – stivlo