나는 영속성을 위해 myBatis를 사용하는 프로젝트를 가지고있다. 아래의 "A"메소드는 외래 키를 추가하고 myISAM에서 innoDB로 테이블을 변환 할 때까지 잘 작동했다. 변환 후에는 메소드 "A"가 자동으로 실패하고 로그의 경고조차도 실패합니다. 변환 후에는 메서드 "B"만 성공적으로 삽입됩니다. 두 방법 모두 올바른 sql을 로그에 기록하지만 "B"만 작동합니다.DB에 FK를 추가 한 후 myBatis 삽입/업데이트 기능에 커밋이 필요한 이유가 무엇입니까?
지금 커밋을해야하는 이유는 누구든지 나를 채울 수 있습니까?하지만 이전에 커밋을 할 필요가 없었습니까?
//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과 innodb 사이의 트랜잭션 차이를 알지 못했습니다. 작은 맛있는 음식에 감사드립니다. – clarson
@AngerClown 귀하의 게시물을 가져 주셔서 감사합니다. 너는 너무 도움이되었다. – hiropon