JPQL检查多对多关系

Jur*_*riy 5 java jpa jpql jpa-2.0

只是一个简单的问题:

有一个实体(例如User)与ManyToMany关系连接到同一个实体(例如,这个关系描述了"友谊",它是对称的).

检查用户A是否是用户B的"朋友"的执行时间最快的方法是什么?"愚蠢"的方式是获取整个List,然后检查用户是否存在,但这显然是开销.

我正在使用JPA 2

这是示例代码:

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

    ....
}
Run Code Online (Sandbox Code Playgroud)

Pas*_*ent 7

如果你不想检索整个List,那么使用一个 MEMBER OF?像这样的东西:

SELECT user FROM UserEntity user WHERE :friend MEMBER OF user.friends
Run Code Online (Sandbox Code Playgroud)

这会给你所有以B为朋友的人.如果要将结果限制为仅限A,请在WHERE子句中添加条件.

不确定这是实现你想要的最佳方式.实际上,"愚蠢"的方法看起来并不那么愚蠢.