如果将空列表传递到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规范中的 4.6.8 节的 表达式 :
逗号分隔列表中必须至少有一个元素定义IN表达式的值集。
IN
换句话说,不管Hibernate解析查询和传递an的能力IN()如何,无论特定数据库是否支持此语法(PosgreSQL都不符合Jira问题),如果需要,都应在此处使用动态查询代码可移植(我通常更喜欢使用Criteria API进行动态查询)。
IN()