Java 如何强制@Transactional工作<;jdbcTemplate>;?
有人能告诉我为什么我的实体事务不起作用吗?Java 如何强制@Transactional工作<;jdbcTemplate>;?,java,sql,spring,hibernate,Java,Sql,Spring,Hibernate,有人能告诉我为什么我的实体事务不起作用吗? rollback()没有效果,commit()也没有效果,我认为begin()也没有效果。我试图禁用自动提交: spring.datasource.auto-commit=false spring.datasource.hikari.auto-commit=false 但在那之后没有任何影响,仍然是交易不起作用。这是我的服务: @Service public class MyService { ... @Autowired p
rollback()没有效果,commit()也没有效果,我认为begin()也没有效果。我试图禁用自动提交:
spring.datasource.auto-commit=false
spring.datasource.hikari.auto-commit=false
但在那之后没有任何影响,仍然是交易不起作用。这是我的服务:
@Service
public class MyService {
...
@Autowired
private final JdbcTemplate jdbcTemplate;
...
@Autowired
private EntityManagerFactory entityManagerFactory;
...
@Transactional
public ArrayList<String> executeSQL(String[] split) {
EntityManager entityManager = entityManagerFactory.createEntityManager();
EntityTransaction entityTransaction = entityManager.getTransaction();
ArrayList<String> listException = new ArrayList<String>();
boolean flag = false;
for (int i = 0; i < split.length; ++i) {
String query = split[i];
try {
entityTransaction.begin();
mapList = jdbcTemplate.queryForList(query);
entityTransaction.commit();
listException.add("Success!");
} catch (Exception e1) {
entityTransaction.rollback();
try {
entityTransaction.begin();
int rows = jdbcTemplate.update(query);
entityTransaction.commit();
listException.add("Sucesss! { [" + rows + "] <-- affected rows }");
} catch (Exception e2) {
entityTransaction.rollback();
flag = true;
listException.add(e2.getCause().getMessage());
}
}
}
entityManager.close();
if(flag){
mapList = emptyMapList;
updateFlag = false;
}
else{
updateFlag = true;
}
return listException;
}
...
@服务
公共类MyService{
...
@自动连线
私有最终JdbcTemplate JdbcTemplate;
...
@自动连线
私人实体管理工厂实体管理工厂;
...
@交易的
公共ArrayList executeSQL(字符串[]拆分){
EntityManager EntityManager=EntityManager工厂。createEntityManager();
EntityTransaction EntityTransaction=entityManager.getTransaction();
ArrayList listException=新建ArrayList();
布尔标志=假;
对于(int i=0;i listException.add(“successs!{[“+rows+”]如果您使用的是@Transactional
注释,为什么您自己尝试手动提交和回滚?我需要手动提交和回滚,因为我的“查询”有时是“创建”/“选择”ect。如果我将“创建”放在"如果我将删除该addnotation,它将不起作用。要使@Transactional起作用-您需要启用事务..您使用的是xml配置还是java配置?您需要通过xml或java配置类启用transactionmanager。关于EntityManagerFactory-EntityManagerFactory是如何创建的?您可能需要检查bean的设置是否正确。我正在使用xml配置。我通过@Autowired创建了entityManagerFactory。请尝试以下步骤:删除两个autocommt设置;删除@transactional,同时删除EntityManager工厂和所有手动处理事务行。您还应该调用jdbc模板的appropiate方法,而不使用try-catch(检查您的查询并选择正确的方法)