将空列表作为参数传递给JPA查询会引发错误

如果将空列表传递到JPA查询中,则会收到错误消息。例如:

List<Municipality> municipalities = myDao.findAll();  // returns empty list

em.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

回到顶部