JPA JPQL:当item(list/set)的属性包含另一个项目时选择项目

fea*_*e86 16 jpa list set jpql

public class Document extends Model {
... 
@ManyToMany
public Set<User> accessors;
...
}
Run Code Online (Sandbox Code Playgroud)

我想选择所有访问者包含某个用户的文档.我只有最少的SQL经验,没有使用JPQL的经验.那怎么办呢?

提前致谢

小智 47

SELECT d FROM Document AS d WHERE :user MEMBER OF d.accessors
Run Code Online (Sandbox Code Playgroud)

应该是你需要的,它比连接表更简单.只是不要忘记使用用户作为参数而不是使用其ID:

query.setParameter("user", user);
Run Code Online (Sandbox Code Playgroud)

  • @Manuel:[IN和成员jpql运算符之间有什么区别](http://stackoverflow.com/questions/5915822/whats-the-difference-between-the-in-and-member-of-jpql-operators ) (3认同)

JB *_*zet 22

select distinct d from Document d inner join d.accessors a where a.id = :id
Run Code Online (Sandbox Code Playgroud)

您应该了解SQL如何工作,然后学习如何在JPQL中使用连接.这是至关重要的.你会在网上找到很多教程.谷歌是你的朋友.

  • 请不要忘记区别。我不明白为什么我最终会得到重复的实体:') (3认同)