2010-05-25 7 views
5

Просто быстрый вопрос:проверка JPQL много-ко-многим

Там это лицо (например, пользователя), который связан с соотношением ManyToMany к одной и той же сущности (например, это отношение описывает «дружбу» и его является симметричным).

Что является самым быстрым способом с точки зрения времени выполнения, чтобы проверить, является ли Пользователь А «другом» пользователя B? «Тупой» способ состоял бы в том, чтобы получить весь список, а затем проверить, существует ли пользователь там, но это, очевидно, накладные расходы.

Я использую JPA 2

Вот пример кода:

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

    .... 
} 

ответ

6

Если вы не хотите, чтобы получить весь список, как насчет использования MEMBER OF? Что-то вроде этого:

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

Это даст вам всех людей, у которых есть B как друг. Если вы хотите ограничить результаты только A, добавьте условие в предложение WHERE.

Не уверен, что это лучший способ достичь того, чего вы хотите. «Тупой» подход не выглядит настолько тупым на самом деле.

+0

Спасибо! Это именно то, что мне нужно. Не могли бы вы также предложить, как изменить запрос, если: friend - это id, а не ссылка Entity? Приносим извинения за простой вопрос, но я немного потерял в JPQL :-) – Juriy

+0

Ничего :-) нашел уже. – Juriy

+0

@Juriy можете ли вы поделиться решением, которое вы нашли? – stivlo