Почему функции MyBatis INSERT / UPDATED теперь требуют фиксации после добавления FK в DB?

StackOverflow https://stackoverflow.com/questions/4372640

  •  09-10-2019
  •  | 
  •  

Вопрос

У меня есть проект, который использует MyBatis для настойчивости. Метод «A» ниже работал просто хорошо, пока не добавил некоторые иностранные ключи и преобразовал мой стол из Миасама в InnoDB. После преобразования метод «A» не будет провалиться молча, даже не предупреждение в журналах. После преобразования только метод «B» делает успешную вставку. Оба метода пишут правильный SQL к журналам, но только «B» работает.

Может ли кто-нибудь наполнить меня на том, почему мне нужно сделать совершение сейчас, но не пришлось делать совершение ранее?

//doesnt work, but worked previously
public void A(Role role) {
    SqlSession session = sqlSessionFactory.openSession();
    try {
        RoleMapper mapper = session.getMapper(RoleMapper.class);
        mapper.updateByPrimaryKeySelective(role);
    }catch(Exception e){
        logger.error(e);
    } finally {
        session.close();
    }
    return;
}

//works correctly, but why?
public void B(Role role) {
    SqlSession session = sqlSessionFactory.openSession();
    try {
        RoleMapper mapper = session.getMapper(RoleMapper.class);
        mapper.updateByPrimaryKeySelective(role);
        session.commit();
    }catch(Exception e){
        logger.error(e);
    } finally {
        session.close();
    }
    return;
}
Это было полезно?

Решение

MyiSam не транзакционный. AutoCommit включен по умолчанию (на самом деле он игнорируется драйвером JDBC с момента каждого оператора). InnoDB - это транзакционный, а автокомут также по умолчанию. Это означает, что вы должны вызвать SessionCommmit () или DB никогда не выполняет обновление.

Видеть Это вход в блоге за дополнительной информацией.

Обратите внимание, что вы должны позвонить в общих чертах, а не оставить вещи до автопрома. Выход из автокамита выключит проблемы с объединением подключения, поскольку оно может оставить заявления в неизвестном состоянии, когда соединение повторно используется.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top