在Java中,以下是一个常见的习语:
if( null != obj && obj.getSomeNumber() > 0 ) { ... }
Run Code Online (Sandbox Code Playgroud)
如果为null!= obj为true ,则仅执行长度检查.但是,在JPA NamedQuery中,这不起作用:
@NamedQuery(
name = "query"
query = "SELECT o FROM SomeObjectList o WHERE o.someObject is not null AND o.someObject.someNumber > 0")
Run Code Online (Sandbox Code Playgroud)
(这是我所期望的,因为这在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 |
------------------------- ----------------------------
Run Code Online (Sandbox Code Playgroud)
所以我想创建一个NamedQuery,它将从SomeObjectList返回所有没有对象(someObject == null)或SomeObject.number> 0的对象.目前,我获取所有对象并检查自己是否设置了someObject.
但是有没有办法在JPA中获得类似的行为,或者我必须对返回的对象执行检查?
编辑:添加图形并澄清问题.(感谢詹姆斯.)
您需要使用外部联接.
请注意您的查询是错误的,您希望似乎想要OR而不是AND,否则只需删除null检查.
SELECT o FROM SomeObjectList o left join o.someObject so WHERE o.someObject is null OR so.someNumber > 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28061 次 |
| 最近记录: |