spring - 如何在 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 的子项
解决方案
您可以尝试使用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)
推荐阅读
- c# - 将代码 xaml.cs 与其他类 .cs 组合
- asp.net-mvc - 在 IIS 中处理“潜在危险的请求”
- visual-studio-code - VSCode 自动格式化,无需换行
- python - 将每一行乘以不同的旋转矩阵
- hibernate - 休眠依赖项,找不到扫描仪类
- python - 在 python 使用 *args 的类中传递和访问参数
- android - 有没有办法将 UnityPlayerActivity 用作 AppcompatActivity?
- node.js - 在数小时内禁用 App Engine 实例/服务器以降低成本
- java - 从 ATM 取款
- laravel - 使用输入重定向回上一页