目的:通过给定的主键列表更新同一表的某些列,并返回有序的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刷新,那么即使我们逐个更新而不是批量更新,我们仍然不会看到数据库更改? 提前致谢
答案 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 (
希望它对你有用!!