J'ai un projet qui utilise myBatis pour la persistance. La méthode "A" ci-dessous fonctionnait très bien jusqu'à ce que j'ajoute quelques clés étrangères et convertis ma table de myISAM en innoDB. Après la conversion, la méthode "A" échouerait silencieusement, pas même un avertissement dans les journaux. Après la conversion, seule la méthode "B" réussit l'insertion. Les deux méthodes écrivent le sql correct dans les journaux, mais seul "B" fonctionne.Pourquoi les fonctions d'insertion/mise à jour de myBatis nécessitent-elles un commit après l'ajout de FK à DB?
Quelqu'un peut-il me renseigner sur pourquoi je dois faire un commit maintenant, mais je n'ai pas eu à faire un commit auparavant?
//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;
}
Je n'étais pas au courant de la différence transactionnelle entre myisam et innodb, merci pour cette petite friandise. – clarson
@AngerClown Merci pour votre message. Vous avez été si utile. – hiropon