Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何强制@Transactional工作<;jdbcTemplate>;?_Java_Sql_Spring_Hibernate - Fatal编程技术网

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;ilistException.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(检查您的查询并选择正确的方法)