首页 > 解决方案 > 如何在 JPQL 中查询可以为空的集合?

问题描述

假设我有这样的实体

class Parent {
    @OneToMany(mappedBy = "par")
    Set<Child> children

    String stuff;
}

class Child {
    @ManyToOne
    @JoinColumn(name="par_id", nullable=false)
    private Parent par;

    String value;
}

我想要这样的查询:

Select DISTINCT par from Parent par LEFT JOIN par.children chi 
WHERE
( par.stuff = :stuff or (:stuff is null))
AND ((chi is not empty) and chi.value = :value))

但这让我回到了有空孩子的父母。

我需要选择所有具有一组非空子项的父项以及匹配值 = x 的子项

标签: springjpajpql

解决方案


您可以尝试使用inner join以确保孩子存在:

select distinct par from Parent par join par.children chi where chi.value = :value

您可以使用exists运算符:

select distinct par from Parent par 
where exists 
 (select chi 
  from Child chi 
where chi.value = :value and chi.parent = par)

推荐阅读