Spring数据JPA更新了多行

时间:2016-09-28 02:10:54

标签: java spring hibernate jpa

目的:通过给定的主键列表更新同一表的某些列,并返回有序的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数据JAP是否可能通过上面的更新方法返回一个小于输入列表大小的整数?如果可能发生这种情况,我们如何知道输入列表中的哪一个失败?按任何顺序?

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

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

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:-2)

我在&#34;中使用&#34;用于更新多组行。

我使用查询更新user_Record set email =:uname,其中id为(&#34; + id +&#34;),用于表user_data中的更新数据

CREATE TABLE {user_record {1}} ID为( 电子邮件VARCHAR(50) NOT NULL COLLATE 'utf16_bin', {名称{1}} ID为VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf16_bin',

VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf16_bin',
    PRIMARY KEY (

terminal log in this pic

希望它对你有用!!