只是一个简单的问题:
有一个实体(例如User)与同一实体的ManyToMany关系相关联(例如,这种关系描述了“友谊”,它是对称的)。
检查用户A是否是用户B的“朋友”的执行时间最快的方法是什么? “愚蠢”的方式是获取整个List,然后检查用户是否存在,但这显然是开销。
我正在使用JPA 2
以下是示例代码:
@Entity
@Table(name="users")
public class UserEntity {
@ManyToMany(fetch = FetchType.LAZY)
private List<UserEntity> friends;
....
}
答案 0 :(得分:7)
如果您不想检索整个列表,那么使用MEMBER OF
呢?像这样:
SELECT user FROM UserEntity user WHERE :friend MEMBER OF user.friends
这会给你所有以B为朋友的人。如果要将结果限制为仅限A,请在WHERE子句中添加条件。
不确定这是实现您想要的最佳方式。 “愚蠢”的做法实际上看起来并不那么愚蠢。