编程语言
首页 > 编程语言> > java – 检查JPA中列表中是否包含ID

java – 检查JPA中列表中是否包含ID

作者:互联网

我有一个实体,其中包含其他实体的列表.例如,它可能是具有Address实体列表的Person.地址并非特定于一个人. (它实际上是与DB中间的连接表的多对多关系)

我正在搜索,试图找到所有没有身份X地址的人

(这可能没有意义,因为这个例子很简单.在我的真实案例中它确实:))

通过命名查询是:

SELECT p FROM Person p left join fetch p.addresses a WHERE p.addresses IS EMPTY OR a.id != :addressId

addressId是我传入的地址的id

我的问题最好用一个例子来解释

>人1可能有地址1和地址2
>人2可能有地址2
>人3可能有地址3

现在是理想的结果

>如果我通过地址1然后我想要person2和person 3返回
>如果我通过地址3然后我想要person1和person 2返回
>如果我通过地址2然后我想要人3返回

目前,当我通过地址1时,我得到了全部三个.我认为这是因为人1也有地址2,这意味着它通过查询.

有没有人知道如何在列表中搜索id,如果它存在于任何元素中,那么不返回它?

希望这是有道理的.如果没有,我可以尝试提供更多细节

谢谢

解决方法:

你可以使用这个查询:

select p from Person p where not exists 
(select a from Person pe left join pe.addresses a where p = pe and a.id = ?1)

标签:java,sql,jpa,named-query
来源: https://codeday.me/bug/20190901/1786287.html