Spring数据JPA更新多行

joh*_*ohn 7 java spring hibernate jpa

目的:通过给定的主键列表更新同一表的某些列并返回有序 int[] 以指示行更新是否成功

查询(非本地):

update MyEntity e set e.col_1 = :v1, e.col_2 = :v2 where e.id in :ids
Run Code Online (Sandbox Code Playgroud)

Spring Data JPA 方法:

@Modifying(clearAutomatically = true)
@Transactional
public int updateCols(@Param("v1") String v1, @Param("v2") String v2, @Param("ids") List<Long> idList);
Run Code Online (Sandbox Code Playgroud)

使用 Spring JpaTransactionManager

问题:1) 仅使用 Spring Data JPA,如何做到这一点?(由于现有代码量大,自定义repository不可选),我们只想用Spring数据JPA实现相当于JDBC批量更新的效果。

2) spring data JAP 是否有可能通过上面的更新方法返回一个小于输入列表大小的整数?如果这可能发生,我们怎么知道我的输入列表中的哪一个失败了?以任何顺序?

3)注意到上述方法成功完成后,数据库行根本没有更新。我们如何强制它与带有 spring 数据 jpa 的数据库同步?

4)如果实体更新没有被spring数据JPA刷新,那么即使我们一个一个而不是批量更新,我们仍然看不到数据库变化吗?提前致谢

Col*_*der 1

首先,据我所知 Spring Data JPA 不能单独存在,它只是建立在裸 JPA 之上的东西。它需要在后台使用 Hibernate 或任何其他 JPA 提供程序。

https://github.com/colonder/Spring-Hibernate-JavaFX-Invoices

看看我的存储库。它是 Hibernate + Spring Boot + Spring Data JPA + Java FX 8,但我认为它会对你有一点帮助。我的存储库遵循 MVC 模式并使用 Spring 事务管理器,就像您的一样。关于问题 3 和 4 AFAIK Hibernate(因为这就是 Spring Data JPA 在我的例子中作为提供程序使用的)更新数据库中的行,而不是应用程序中的行。问题应该是数据库中更新的行在应用程序中不可见,而不是相反。