Почему функции MyBatis INSERT / UPDATED теперь требуют фиксации после добавления FK в DB?
Вопрос
У меня есть проект, который использует 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 никогда не выполняет обновление.
Видеть Это вход в блоге за дополнительной информацией.
Обратите внимание, что вы должны позвонить в общих чертах, а не оставить вещи до автопрома. Выход из автокамита выключит проблемы с объединением подключения, поскольку оно может оставить заявления в неизвестном состоянии, когда соединение повторно используется.