我发现 JPA 不支持以下更新:
Update Person p set p.name = :name_1 where p.id = :id_1,
p.name = :name_2 where p.id = :id_2,
p.name = :name_3 where p.id = :id_3
....
// It could go on, depending on the size of the input. Could be in 100s
所以我有两个选择:
选项1:
Query q = em.createQuery("Update Person p set p.name = :name where p.id = :id");
For ( int x=0; PersonsList.length; x++ ) {
// add name and id parameters
em.executeUpdate();
}
问题:
- 这就是批量更新所需的全部内容吗?还有什么我需要补充的吗?我设置
hibernate.jdbc.batch_size", "20"
- 这里默认开启乐观锁了吗?(虽然我的实体中没有@Version)
- 如果不是@Version,我需要做什么才能强制执行乐观锁定?
选项 2:
Select Case
使用语法或 with构造一个查询Criteria API
问题:
- 批处理仍然在这里发生吗?(在一个大查询中)
- 就性能而言,这是否比第一种方法更好?
- 这两个选项中推荐的方法是什么?还有其他更好的方法吗?