Как заставить @Transactional работать <jdbcTemplate>? - PullRequest
0 голосов
/ 21 января 2020

Может кто-нибудь сказать мне, почему моя entityTransaction не работает?
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;
    }
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...