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?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage