问题描述:
javax.persistence.TransactionRequiredException: Executing an update/delete query
问题分析:
1、JPA使用Query.executeUpdate()方法对数据库进行更新时,没有添加@Transactional事务注解,导致insert、update、delete语句无法执行。
package com.dao;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
@Repository
public class CommonRepository {
@PersistenceContext
private EntityManager entityManager;
/**
* 执行SQL语句
*
* @param sql SQL语句
*/
public void executeSQL(String sql) {
Query query = this.entityManager.createNativeQuery(sql);
query.executeUpdate();
}
}
解决办法:
在方法上添加@Transactional事务注解即可。
package com.dao;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
@Repository
public class CommonRepository {
@PersistenceContext
private EntityManager entityManager;
/**
* 执行SQL语句
*
* @param sql SQL语句
*/
@Transactional(rollbackFor = Exception.class)
public void executeSQL(String sql) {
Query query = this.entityManager.createNativeQuery(sql);
query.executeUpdate();
}
}