将空列表作为参数传递给JPA查询会引发错误
如果将空列表传递到JPA查询中,则会收到错误消息。例如:
List<Municipality> municipalities = myDao.findAll(); // returns empty listem.createQuery("SELECT p FROM Profile p JOIN p.municipality m WHERE m IN (:municipalities)")
.setParameter("municipalities", municipalities)
.getResultList();
由于列表为空,因此Hibernate在SQL中将其生成为“ IN()”,这给我Hypersonic数据库错误。
在Hibernate问题跟踪中有一张票证,但是那里没有太多评论/活动。我也不知道其他ORM产品或JPA规范中的支持。
我不喜欢每次都要手动检查空对象和空列表的想法。是否有一些众所周知的方法/扩展?您如何处理这些情况?
回答:
根据JPA 1.0规范中的 节的 :
逗号分隔列表中必须至少有一个元素定义
IN
表达式的值集。
换句话说,不管Hibernate解析查询和传递an的能力IN()
如何,无论特定数据库是否支持此语法(PosgreSQL都不符合Jira问题),如果需要,都应在此处使用动态查询代码可移植(我通常更喜欢使用Criteria
API进行动态查询)。
以上是 将空列表作为参数传递给JPA查询会引发错误 的全部内容, 来源链接: utcz.com/qa/413734.html