5

只是一个简单的问题:

存在与同一实体的多对多关系连接的实体(例如用户)(例如,此关系描述“友谊”并且它是对称的)。

就执行时间而言,检查用户 A 是否是用户 B 的“朋友”的最快方法是什么?“愚蠢”的方式是获取整个列表,然后检查用户是否存在,但这显然是开销。

我正在使用 JPA 2

这是示例代码:

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

    ....
}
4

1 回答 1

8

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

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

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

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

于 2010-05-25T11:45:15.063 回答