【问题标题】:JPQL check many-to-many relationshipJPQL 检查多对多关系
【发布时间】:2011-02-23 15:37:00
【问题描述】:

只是一个简单的问题:

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

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

我正在使用 JPA 2

示例代码如下:

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

    ....
}

【问题讨论】:

    标签: java jpa jpql jpa-2.0


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢!这正是我所需要的。如果 :friend 是 id,而不是 Entity 引用,您能否建议如何修改查询?我为这个简单的问题道歉,但我对 JPQL 有点迷失了 :-)
    • @Juriy 你能分享一下你找到的解决方案吗?
    猜你喜欢
    • 2021-10-21
    • 2017-07-07
    • 2013-06-17
    • 2019-12-17
    • 2017-07-03
    • 2016-02-13
    • 2016-02-18
    • 2020-11-26
    相关资源
    最近更新 更多