如果我将一个空列表传递给 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 规范中的支持。
我不喜欢每次都必须手动检查空对象和空列表的想法。是否有一些众所周知的方法/扩展?你如何处理这些情况?
原文由 Tuukka Mustonen 发布,翻译遵循 CC BY-SA 4.0 许可协议
根据 JPA 1.0 规范中的 表达式中的 4.6.8 部分:
换句话说,无论 Hibernate 是否能够解析查询并传递
IN()
,无论特定数据库是否支持此语法(根据 Jira 问题,PosgreSQL 不支持),您都应该使用如果您希望代码可移植(我通常更喜欢使用 Criteria API 进行动态查询),请在此处进行动态查询。