2010-05-25 14 views
5

Juste une petite question:JPQL vérification many-to-many

Il y a l'entité (par exemple l'utilisateur) qui est relié à la relation ManyToMany à la même entité (par exemple cette relation décrit « amitié » et est symétrique).

Quel est le moyen le plus rapide en termes de temps d'exécution pour vérifier si l'utilisateur A est un "ami" de l'utilisateur B? Le "bête" serait d'aller chercher toute la liste, puis de vérifier si l'utilisateur existe, mais c'est évidemment la surcharge.

J'utilise JPA 2

Voici l'exemple de code:

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

    .... 
} 

Répondre

6

Si vous ne voulez pas récupérer toute la liste, qu'en utilisant un MEMBER OF? Quelque chose comme ceci:

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

Cela vous donnerait tous les gens qui ont B comme ami. Si vous souhaitez restreindre les résultats à A uniquement, ajoutez une condition dans la clause WHERE.

Vous ne savez pas si c'est la meilleure façon de réaliser ce que vous voulez. L'approche "stupide" n'a pas l'air si bête en fait.

+0

Merci! C'est exactement ce dont j'ai besoin. Pourriez-vous également suggérer comment modifier la requête si: friend est l'id, pas la référence Entity? Je m'excuse pour la question simple mais je suis un peu perdu en JPQL :-) – Juriy

+0

Tant pis :-) déjà trouvé. – Juriy

+0

@Juriy pouvez-vous s'il vous plaît partager la solution que vous avez trouvé? – stivlo