最近在springboot中整合jpa的時候碰到一個異常,異常如下
javax.persistence.TransactionRequiredException: Executing an update/delete query
at org.hibernate.query.internal.AbstractProducedQuery.executeUpdate(AbstractProducedQuery.java:1496)
該異常一般出現在執行更新刪除操作時出現,jpa要求執行這些操作時需要加上事務管理
當使用@Query調用自定義sql時在執行方法前加上@Modifying@Transactional一般就能解決
但是開發過程中由於反復出現調用自定義sql的場景,所以為了調用方便決定利用EntityManager.Query做個封裝,然后就出問題了…利用EntityManager執行update語句即使加上了@Modifying@Transactional仍然出現Executing an update/delete query的異常,在反復查找后終於找到一個解決方案,如下:
public int sqlUpdate(String sql,String[] arrs){
EntityManager em=emf.createEntityManager();
Query query = em.createNativeQuery(sql);
for(int i = 0; i < arrs.length;i++){
query.setParameter(i+1,arrs[i]);
}
em.getTransaction().begin();
int num = query.executeUpdate();
em.getTransaction().commit();
em.close();
return num;
}
利用EntityManager內的事務控制器進行事務管理
————————————————
版權聲明:本文為CSDN博主「言一木」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_37769855/article/details/91437305