[英]Spring data JPA update multiple rows
目的:通過給定的主鍵列表更新同一表的某些列並返回有序 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,如何做到這一點? (由於現有代碼量大,自定義repository不可選),我們只想用Spring數據JPA實現相當於JDBC批量更新的效果。
2) spring data JAP 是否有可能通過上面的更新方法返回一個小於輸入列表大小的整數? 如果這可能發生,我們怎么知道我的輸入列表中的哪一個失敗了? 以任何順序?
3)注意到上述方法成功完成后,數據庫行根本沒有更新。 我們如何強制它與帶有 spring 數據 jpa 的數據庫同步?
4)如果實體更新沒有被spring數據JPA刷新,那么即使我們一個一個而不是批量更新,我們仍然看不到數據庫變化嗎? 提前致謝
首先,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 在我的情況下用作提供程序的內容)更新數據庫中的行,而不是應用程序中的行。 問題應該是數據庫中更新的行在應用程序中不可見,而不是相反。
@Query("select t from SixxxoView t where t.idbien IN (:idbienes) ")
public List<SixxxoView> findByIdbienes(
@Param("idbienes") List<Long> idbienes);
我使用“中”來更新多個行集。
我使用查詢更新user_Record設置email =:uname,其中(“ + id +”)中的id用於更新表user_data中的數據
CREATE TABLE
user_record (
id VARCHAR(50) NOT NULL COLLATE 'utf16_bin',
電子郵件VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf16_bin',
名稱VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf16_bin', PRIMARY KEY (
id ) )
@RequestMapping(value = "/updateSums/{id}", method = RequestMethod.GET)
public String updateFew(@PathVariable String id ,Model model)
{
EntityManager em = entityManagerFactory.createEntityManager();
id= id.replace(",", "','");
id= "'"+id+"'";
em.getTransaction().begin();
System.out.println( );
em.createNativeQuery("update user_Record set email= :uname where id in ("+id+")", UserRecord.class)
.setParameter("uname", "shaktimaan@gangadhar.tv")
.executeUpdate()
;
em.getTransaction().commit();
return "user_one";
}
希望它能為您服務!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.