Warum Mybatis insert / update-Funktionen erfordern nun eine Festschreibung nach FK DB hinzufügen?

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

  •  09-10-2019
  •  | 
  •  

Frage

Ich habe ein Projekt, das Mybatis für Persistenz verwendet. Methode „A“ arbeitet unter ganz gut, bis ich einige Fremdschlüssel hinzugefügt und konvertierte meinen Tisch von MyISAM in InnoDB. Nach der Konvertierung fehlschlagen würde eine Warnung in den Protokollen still, Methode „A“, nicht einmal. Nach der Umwandlung der Fall ist, nur die Methode „B“ einen erfolgreichen Einsatz. Beide Methoden schreiben die richtige SQL in die Protokolle, sondern nur „B“ funktioniert.

Kann jemand füllen mich in warum brauche ich jetzt ein Commit zu tun, aber nicht über die zuvor eine Festschreibung zu tun?

//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;
}
War es hilfreich?

Lösung

MyISAM ist nicht transaktional. Autocommit ist standardmäßig aktiviert (eigentlich ist es durch die JDBC-Treiber, da jede Aussage Commits ignoriert wird). InnoDB ist Transaktions- und autocommit ist auch standardmäßig deaktiviert. Diese Mittel haben Sie Anruf session.commit () oder die DB nie tut wirklich das Update.

Unter dieser Blog-Eintrag für weitere Informationen.

Beachten Sie, dass Sie rufen Sie verpflichten sollten, anstatt verlassen Dinge autocommit auf. autocommit off verlassen werden Probleme mit Verbindungspooling verursachen, da sie Aussagen in einem unbekannten Zustand verlassen können, wenn die Verbindung wieder verwendet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top