Spring JPA 与实体的两个列表字段相交



我有一个名为A的实体,它有一个属性userGroups

@entity
Public class A {
@OneToMany
@JoinTable(name = "a_user_groups", ...)
private Set<UserGroup> userGroups;
...
}

我需要找到那些A实体,它们的userGroups与给定Set<UserGroup> userGroups参数没有交集。

这是我的方法:

@Query("SELECT a FROM A a WHERE :userGroups intersect a.userGroups is NULL")
List<A> getAWithNoIntersectionInGroups(@param("userGroups") Set<UserGroup> userGroups)

但是jpa中没有intersect关键字。

Not In关键字在这里不起作用:

假设有一个A实体的用户组 ID{1,3},而我传递的用户组 ID{3,4},现在{1,3}不在{3,4}中,它是真的,实体将被选中,但它不应该被选中,因为有一个相互项{3}

您可以使用NOT INSQL 子句代替相交。

@Query("SELECT a FROM A a WHERE a.userGroups not in (:userGroups)")
List<A> getAWithNoIntersectionInGroups(@param("userGroups") Set<UserGroup> userGroups)

最新更新