javax.persistence.TransactionRequiredException: Executing an update/delete query


最近在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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM