gpt4 book ai didi

如果值不为空,则 JPA 执行部分查询

转载 作者:行者123 更新时间:2023-12-04 14:05:37 26 4
gpt4 key购买 nike

在 Java 中,以下是一个常见的习惯用法:

if( null != obj && obj.getSomeNumber() > 0 ) { ... }

如果 null != obj 为真,这将仅执行长度检查。
但是,在 JPA NamedQuery 中,这不起作用:
@NamedQuery(
name = "query"
query = "SELECT o FROM SomeObjectList o WHERE o.someObject is not null AND o.someObject.someNumber > 0")

(这是我所期望的,因为这在 SQL 中也不起作用。)

o.someObject 要么是“null”,要么是存储 SomeObjects 的表的外键。 (表格的每一列对应 SomeObject 的一个属性。)
-------------------------           ----------------------------
| Table: SomeObjectList | | Table: SomeObject |
------------------------- ----------------------------
| id | someObject | | id | number | name |
------------------------- ----------------------------
| 1 | 4 | | 3 | -4 | foo |
------------------------- ----------------------------
| 2 | null | | 4 | 2 | bar |
------------------------- ----------------------------

所以我想创建一个 NamedQuery,它将返回 SomeObjectList 中没有对象(someObject == null)或 SomeObject.number > 0 的所有对象。
目前,我获取所有对象并检查自己是否设置了 someObject。

但是有没有办法在 JPA 中获得类似的行为,或者我是否必须对返回的对象执行检查?

编辑:添加图形并澄清问题。 (感谢詹姆斯。)

最佳答案

您需要为此使用外部联接。

请注意您的查询是错误的,您似乎想要一个 OR 而不是 AND,否则只需删除空检查。

SELECT o FROM SomeObjectList o left join o.someObject so WHERE o.someObject is null OR so.someNumber > 0

关于如果值不为空,则 JPA 执行部分查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5855814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com