Hallo zusammen,
Ich benutze Hibernate erstmal zur Probe mit einer sehr einfachen Tabelle. Alle CRUD Operationen funktionieren auch soweit. Nun versuche ich die Savepoints zu nutzen. Leider ignoriert Hibernate den Rollback zu einem solchen.
Hier mal etwas code:
Code:
Transaction tx = HibernateUtil.getSessionFactory().getCurrentSession().beginTransaction();
Benutzer benutzer1 = benutzerDAO.findById(new Integer(1), false);
benutzer1.setVorname("Jane");
benutzerDAO.makePersistent(benutzer1);
SetSavepointWork work = new SetSavepointWork("my_savepoint");
HibernateUtil.getSessionFactory().getCurrentSession().doWork(work);
Savepoint savepoint = work.getSavepoint();
benutzer1.setVorname("John");
benutzerDAO.makePersistent(benutzer1);
HibernateUtil.getSessionFactory().getCurrentSession().doWork(new Work(){
public void execute(Connection connection) throws SQLException
{
connection.rollback(savepoint);
}
});
tx.commit();
Die SetSavepointWork Klasse ist eine simple Implementierung des Work Interfaces. Sie hält zusätzlich den Savepoint und kann ihn per Getter zurückgeben.
Wo liegt also mein Fehler? Ich erwarte, dass ich den Vornamen auf 'Jane' setze, in die DB schreibe, dann einen Befehl absetze der den Vornamen auf 'John' setzt und in die DB schreibt. Aber dann einen Rollback auf den Zeitpunkt macht zu dem nur 'Jane' gesetzt sein sollte.
Leider wird das ignoriert und der finale Eintrag in der DB ist die Aktion des letzten Setters ('John')...
Ich hoffe ihr könnt mir da etwas weiterhelfen.
Gruß,
Michael