我有一个名为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)