Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPQL检查多对多关系_Java_Jpa_Jpql_Jpa 2.0 - Fatal编程技术网

Java JPQL检查多对多关系

Java JPQL检查多对多关系,java,jpa,jpql,jpa-2.0,Java,Jpa,Jpql,Jpa 2.0,只是一个简单的问题: 有一个实体(例如用户)通过多个关系连接到同一个实体(例如,这个关系描述了“友谊”,并且是对称的) 在执行时间方面,检查用户A是否是用户B的“朋友”的最快方法是什么?“愚蠢”的方法是获取整个列表,然后检查用户是否存在,但这显然是开销 我用的是JPA2 以下是示例代码: @Entity @Table(name="users") public class UserEntity { @ManyToMany(fetch = FetchType.LAZY) privat

只是一个简单的问题:

有一个实体(例如用户)通过多个关系连接到同一个实体(例如,这个关系描述了“友谊”,并且是对称的)

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

我用的是JPA2

以下是示例代码:

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

    ....
}
@实体
@表(name=“users”)
公共类用户实体{
@ManyToMany(fetch=FetchType.LAZY)
私人名单朋友;
....
}

如果您不想检索整个列表,那么使用的
成员怎么样?大概是这样的:

SELECT user FROM UserEntity user WHERE :friend MEMBER OF user.friends
那会给你所有有B作为朋友的人。如果要将结果限制为仅限,请在WHERE子句中添加条件


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

谢谢!这正是我需要的。如果:friend是id,而不是实体引用,您还可以建议如何修改查询吗?对于这个简单的问题我深表歉意,但我对JPQL有点迷茫:-)@Juriy您能分享一下您找到的解决方案吗?