JPQL проверяет отношение «многие ко многим» - PullRequest
5 голосов
/ 25 мая 2010

Просто быстрый вопрос:

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

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

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

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

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

    ....
}

1 Ответ

7 голосов
/ 25 мая 2010

Если вы не хотите получать весь список, как насчет использования MEMBER OF? Как то так:

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...