【发布时间】:2017-02-05 19:28:19
【问题描述】:
目的:通过给定的主键列表更新同一表的某些列,并返回有序的 int[] 以指示行更新是否成功
查询(非本地):
update MyEntity e set e.col_1 = :v1, e.col_2 = :v2 where e.id in :ids
Spring Data JPA 方法:
@Modifying(clearAutomatically = true)
@Transactional
public int updateCols(@Param("v1") String v1, @Param("v2") String v2, @Param("ids") List<Long> idList);
使用Spring JpaTransactionManager
问题:1) 仅使用 Spring Data JPA,如何做到这一点? (由于现有代码量大,自定义存储库不是一个选项),我们希望仅使用 Spring 数据 JPA 实现相当于 JDBC 批量更新的效果。
2) spring data JAP 是否有可能通过上面的更新方法返回一个小于输入列表大小的整数?如果这可能发生,我们怎么知道我的输入列表中的哪一个失败了?有什么顺序吗?
3) 注意到上述方法成功完成后,数据库行根本没有更新。我们如何使用 spring data jpa 强制它与数据库同步?
4)如果实体更新没有被spring data JPA刷新,那么即使我们一个一个地更新而不是批量更新,我们仍然看不到数据库的变化吗? 提前致谢
【问题讨论】: