Warum werden die Transaktionen zurückgesetzt, auch wenn Propagation = Propagation.REQUIRES_NEW in der zweiten Methode in der Spring-Serviceklasse?
Die Grundeinstellungen sind jetzt alle in Ordnung und ich habe begonnen, Transaktionen auszuprobieren. Struts + Spring + Hibernate Annotation-Transaktionsmanager. Dies ist der Beispielcode in Aktion, der eine Serviceklasse aufruft:
userService.addUser();
Hier ist deraddUser()
Methode in der Serviceklasse:
@Transactional(value="deu" )
public void addUser() {
userDao.addUser();
this.addUser2();
}
Zuerst habe ich angerufenaddUser
In userDao wird ein Benutzer eingefügt. Zweitens habe ich angerufenaddUser2
in einer anderen Methode in dieser Serviceklasse.
@Transactional(value="deu" , propagation=Propagation.REQUIRES_NEW )
public void addUser2() {
//should be a new transaction and will not affect the previous one.
//this one will fail but should not affect the previous one.
userDao.addUserFail();
}
Und dieser wird wegen null PK gescheitert. Ich nehme an, der zweite Anruf (addUser2
) schlägt fehl, hat jedoch keine Auswirkungen auf die vorherige. Der Benutzer wird jedoch nicht eingefügt.
Wenn ich nur anrufe:
@Transactional(value="deu" )
public void addUser() {
userDao.addUser();
//this.addUser2();
}
Es funktioniert, was bedeutet, dass Grundeinstellungen wie die Datenbank nicht falsch sind.
Irgendeine Idee?