EclipseLink INTERSECT 过滤掉两个集合是否有共同的元素

EclipseLink INTERSECT filter out if two sets have element in common

有人能帮忙吗?

实体 A 有一个包含一组枚举的字段。

方法采用一组枚举。

任务 - 如果 A.field 有 1 个或多个元素与传递的枚举集相同,则过滤掉值。 我试图通过INTERSECT实现它,但结果没有实现。

可行的解决方案 - 不是成员,但它只能用于 1 个参数...可以使用 for() 实现,但我确信这不是一个好的做法...

在 JPA 中没有将一个集合与另一个集合进行比较的直接方法。

围绕该问题的解决方案虽然涉及子查询,但与 JPA 评估您的 MEMBER OF 子句的方式非常相似。 sub-query 可让您查看集合中的各个值并将其与其他值进行比较,然后在主查询中使用该结果。大致如下:

"Select a from A a where a.id not in (select distinct aPrime.id from A aPrime join aPrime.field field where field in :parameterList)"

我不是 DBA,但如果有人抱怨这是低效的,还有许多其他表达方式,可能存在:

"Select a from A a where exists (select aPrime from A aPrime join aPrime.field field where field in :parameterList and aPrime.id = a.id)"