代码之家  ›  专栏  ›  技术社区  ›  Juriy

JPQL检查多对多关系

  •  5
  • Juriy  · 技术社区  · 14 年前

    只是一个简单的问题:

    有一个实体(例如用户)与同一个实体的许多关系相连(例如,这个关系描述“友谊”,并且是对称的)。

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

    我使用JPA 2

    下面是示例代码:

    @Entity
    @Table(name="users")
    public class UserEntity {
        @ManyToMany(fetch = FetchType.LAZY)
        private List<UserEntity> friends;
    
        ....
    }
    
    1 回复  |  直到 14 年前
        1
  •  7
  •   Pascal Thivent    14 年前

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

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

    那会给你所有把B当作朋友的人。如果要将结果限制为仅限,请在WHERE子句中添加一个条件。

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