2010-05-25 5 views
5

Nur eine kurze Frage:JPQL Check many-to-many-Beziehung

das Unternehmen Es gibt (zB Benutzer), die mit der ManyToMany Beziehung zu derselben Einheit verbunden ist (zum Beispiel dieser Beziehung „Freundschaft“ und beschreibt ist symmetrisch).

Was ist der schnellste Weg in Bezug auf die Ausführungszeit, um zu überprüfen, ob Benutzer A ein "Freund" von Benutzer B ist? Der "dumme" Weg wäre, ganze Liste zu holen und dann zu prüfen, ob dort ein Benutzer existiert, aber das ist offensichtlich der Overhead.

Ich bin mit JPA 2

Hier ist der Code Beispiel:

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

    .... 
} 

Antwort

6

Wenn Sie nicht die ganze Liste abgerufen werden, was über eine MEMBER OF mit? Etwas wie dieses:

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

Das würde Ihnen alle Leute geben, die B als Freund haben. Wenn Sie die Ergebnisse auf A beschränken möchten, fügen Sie eine Bedingung in der WHERE-Klausel hinzu.

Nicht sicher, es ist der beste Weg, um zu erreichen, was Sie wollen, obwohl. Der "dumme" Ansatz sieht tatsächlich nicht so dumm aus.

+0

Danke! Das ist genau das, was ich brauche. Können Sie auch vorschlagen, wie die Abfrage geändert wird, wenn: friend die ID ist, nicht die Entity-Referenz? Ich entschuldige mich für die einfache Frage, aber ich bin ein bisschen in JPQL verloren :-) – Juriy

+0

Macht nichts :-) bereits gefunden. – Juriy

+0

@Juriy können Sie bitte teilen Sie die Lösung, die Sie gefunden haben? – stivlo