【问题标题】:Spring data JPA update multiple rowsSpring数据JPA更新多行
【发布时间】: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刷新,那么即使我们一个一个地更新而不是批量更新,我们仍然看不到数据库的变化吗? 提前致谢

【问题讨论】:

    标签: java spring hibernate jpa


    【解决方案1】:

    首先,AFAIK 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 在我的情况下用作提供者)更新数据库中的行,而不是应用程序中的行。问题应该是数据库中更新的行在应用中是不可见的,而不是相反。

    【讨论】:

      【解决方案2】:
      @Query("select t from SixxxoView t where t.idbien IN (:idbienes) ")
       public List<SixxxoView> findByIdbienes(
               @Param("idbienes") List<Long> idbienes);
      

      【讨论】:

      • 欢迎来到 Stack Overflow。如果您能解释为什么您的答案比已经提供的更好,那就太好了。
      猜你喜欢
      • 2020-03-23
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-26
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多