Spring Data JPA更新多行

7

目的:根据给定的主键列表更新同一张表中的某些列,并返回排序后的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,如何做到?(由于大量现有代码,自定义存储库不是选项),我们想要实现与JDBC批量更新等效的效果。

2)是否可能Spring Data JPA将返回比输入列表大小更小的整数?如果发生这种情况,我们如何知道我的输入列表中哪个失败了?任何顺序都可以吗?

3)注意到上述方法成功完成后,数据库行根本没有被更新。如何使用Spring Data JPA强制它与数据库同步?

4)如果实体更新未被Spring Data JPA刷新,则即使我们逐个更新而不是批量更新,仍然无法看到数据库更改?

谢谢!
2个回答

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事务管理器,与你的代码库类似。就第三和第四个问题而言,据我所知,Hibernate(因为在我的情况下,Spring Data JPA使用它作为提供者)会更新数据库中的行,而不是应用程序中的行。问题应该是数据库中已更新的行在应用程序中不可见,而不是相反。

-1
@Query("select t from SixxxoView t where t.idbien IN (:idbienes) ")
 public List<SixxxoView> findByIdbienes(
         @Param("idbienes") List<Long> idbienes);

7
欢迎来到 Stack Overflow。如果您能解释一下为什么您的答案比已有的更好,那就太好了。 - chb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接