1
我有一個使用myBatis進行持久化的項目。下面的方法「A」工作得很好,直到我添加了一些外鍵,並將我的表從myISAM轉換爲innoDB。轉換後,方法「A」會靜默失敗,甚至不會在日誌中發出警告。轉換後,只有方法「B」成功插入。這兩種方法都將正確的sql寫入日誌,但只有「B」纔有效。爲什麼myBatis插入/更新功能現在需要在將FK添加到數據庫之後進行提交?
任何人都可以填寫我爲什麼我需要現在做一個提交,但不必以前做過提交?
//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 2010-12-07 03:11:54