JPQL查询---怎么用'是null'

Mik*_*ike 13 jpql

我在JPQL中使用以下查询来查询其地址列为空的人.

列出rl = em.createQuery("从o中选择o为o,其中o.address为空").setFirstResult(0).setMaxResults(50).getResultList(); ...

这行代码总是返回一个空列表,显然该表确实具有与条件匹配的条目.

class Person {地址; 字符串名称; ...} class Address {String name; ...}

谁知道这个jpql语句有什么问题?提前致谢.

Nay*_*kar 20

如上所述,地址列为空,然后尝试使用IS EMPTY表达式而不是IS NULL.

em.createQuery( "SELECT o FROM Person o where (o.address.id IS NULL OR o.address.id = 0").setMaxResults(50).getResultList();
Run Code Online (Sandbox Code Playgroud)

根据id的数据类型检查约束.

此外,没有必要提及setFirstResult(0),因为它不会跳过任何结果,没有它,默认情况下将获取所有匹配的结果.

  • 感谢您的回复.但是我不认为"空"会做得很好.正如规范所说,是空的用于检查集合是否为空.如果使用它将弹出异常:javax.persistence.PersistenceException:org中的org.datanucleus.jpa.NucleusJPAHelper.getJPAExceptionForNucleusException(NucleusJPAHelper.java:264)不支持在"java.lang.Object"上调用方法"size". datanucleus.jpa.JPAQuery.getResultList(JPAQuery.java:177) (3认同)
  • 固定,原来是datanucleus的错误.但是坦斯克 (3认同)