2010-05-25 17 views
5

Wystarczy szybkie pytanie:JPQL sprawdzić wiele-do-wielu

Jest podmiotem (np Użytkownika), który jest połączony z relacji ManyToMany do tego samego podmiotu (na przykład ta relacja opisuje „przyjaźń” i jest symetryczny).

Jaki jest najszybszy sposób pod względem czasu wykonania, aby sprawdzić, czy użytkownik A jest "przyjacielem" użytkownika B? "Głupim" sposobem byłoby pobranie całej listy, a następnie sprawdzenie, czy użytkownik istnieje, ale to oczywiście obciążenie.

Używam WZP 2

Oto przykładowy kod:

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

    .... 
} 

Odpowiedz

6

Jeśli nie chcesz, aby pobrać całą listę, co o użyciu MEMBER OF? Coś takiego:

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

To dałoby wszystkich ludzi, którzy mają B jako przyjaciela. Jeśli chcesz ograniczyć wyniki tylko do A, dodaj warunek do klauzuli WHERE.

Nie jestem pewien, czy to najlepszy sposób na osiągnięcie tego, co chcesz. "Głupie" podejście nie wygląda tak głupio.

+0

Dzięki! Dokładnie tego potrzebuję. Czy możesz również zasugerować, jak zmodyfikować zapytanie, jeśli: friend jest identyfikatorem, a nie referencją Entity? Przepraszam za proste pytanie, ale jestem trochę zagubiony w JPQL :-) – Juriy

+0

Nieważne :-) już znalezione. – Juriy

+0

@Juriy, czy możesz podzielić się znalezionym rozwiązaniem? – stivlo

Powiązane problemy