如果值不为null,JPA将执行部分查询
在Java中,以下是一种常见的习惯用法:如果值不为null,JPA将执行部分查询,jpa,Jpa,在Java中,以下是一种常见的习惯用法: if( null != obj && obj.getSomeNumber() > 0 ) { ... } 如果为空,则仅执行长度检查!=obj是真的。 但是,在JPA NamedQuery中,这不起作用: @NamedQuery( name = "query" query = "SELECT o FROM SomeObjectList o WHERE o.someObject is not null AND o.someObjec
if( null != obj && obj.getSomeNumber() > 0 ) { ... }
如果为空,则仅执行长度检查!=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是存储someObject的表的“null”或外键。(表的每列对应于SomeObject的一个属性。)
因此,我想创建一个NamedQuery,它将返回SomeObjectList中没有对象(someObject==null)或someObject.number>0的所有对象。
目前,我获取所有对象并检查自己是否设置了someObject
但是有没有办法在JPA中获得类似的行为,或者我必须对返回的对象执行检查
编辑:添加图形并澄清问题。(感谢詹姆斯。)我不太明白吗
您甚至不需要“NOTNULL”,只要长度>0,null就不会返回true
另外,你的代码是错误的,长度是一个函数,而不是一个导航
应该是,
SELECT o FROM SomeObject o WHERE LENGTH(o.arry) > 0
或者arry是一种收款关系?在这种情况下,您需要使用大小,并且联接还将过滤缺少的关系。您需要使用外部联接 请注意,您的查询是错误的,您需要的似乎是AND,否则只需删除null检查
SELECT o FROM SomeObjectList o left join o.someObject so WHERE o.someObject is null OR so.someNumber > 0
“length”应该只是数据库的一列。我选择了这个,所以它可以和我的java比较,但这似乎不是一个好的选择…编辑它。谢谢谢谢你,好像有用。但不应该“不为空”和“为空”或“为空”相同吗?
SELECT o FROM SomeObjectList o left join o.someObject so WHERE o.someObject is null OR so.someNumber > 0