JPQL检查多对多关系

时间:2010-05-25 11:32:30

标签: 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;

    ....
}

1 个答案:

答案 0 :(得分:7)

如果您不想检索整个列表,那么使用MEMBER OF呢?像这样:

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

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

不确定这是实现您想要的最佳方式。 “愚蠢”的做法实际上看起来并不那么愚蠢。