【发布时间】:2017-04-14 08:03:22
【问题描述】:
我想使用 Spring 的 HibernateTemplate (Hibernate 5.1) 执行数据库批量更新。
HibernateTemplate 提供以下接口:public int bulkUpdate(String,Object...)。
我的查询是UPDATE entity item SET item.attribute.id = ? WHERE item.id in (?.....?)。
遇到了很多麻烦,想问一下什么是正确的方法使用HibernateTemplate
- 上述查询导致弃用警告
[DEPRECATION] Encountered positional parameter near line 1, column 172 in HQ - 将上述查询替换为 JPA 样式参数 (
UPDATE entity item SET item.attribute.id = ?1 WHERE item.id in (?2,?3.....?N)) 会导致 Hibernate 在构建参数元数据时抛出 NullPointerException - 如 one of the most authoritative Hibernate sources 所见,命名参数会导致误导性异常
问题是:我如何正确使用 Spring 的 HibernateTemplate 制定批量更新查询?正如 Mykong 正确报道的那样,HibernateTemplate 自动将查询参数设置为从 0 开始,但最终作者让程序使用非位置参数工作,而没有提及(或根本没有)任何警告。
【问题讨论】: