@Transactional nicht funktioniert, wenn ich Ausnahme auf der nächsten Zeile werfen

GOXR3PLUS:

Ich verstehe nicht, das unten stehende Verhalten:

Ich habe eine Methode:

@Transactional
public void processRejection(final Path path) {

    try {

        //some code here

    } catch (final Exception e) {
         this.handleException(e));
    }
 }

welche die unter den Anrufen hat eine saveseine Einheit , die noch nicht in der Datenbank vorhanden:

void handleException(final Throwable e) {

    this.filesMonitoringJpaManager.save(someEntityHere);

    throw new Exception(...)
}

Nun ist die seltsam ist , wenn ich kommentieren , die throw new Exception(...)die saveWerke, aber wenn ich die Auskommentierung throw new Exception(...) dann das savenicht funktioniert und ich habe keine Ahnung , warum?

Was seltsames Verhalten ist, dass von JPA oder Hibernate? Ist es etwas über Java Exception-Mechanismus, die ich nicht verstehe?

Andronicus:

@Transactionalgemeint ist ein Rollback , wenn etwas schief geht (eine Ausnahme ausgelöst). Sie Speichern einer Einheit in dem catchBlock, aber Sie Erneutes Auslösen eine Ausnahme verursacht die Transaktionsverfahren zur Zurückdrängung.

Sie können jedoch eine Ausnahme geben, das wird nicht Rollback verursachen:

@Transactional(noRollbackFor = {MyException.class})
public void processRejection(final Path path) {

    try {
        //somecode here whatever
    } catch (final Exception e) {
         this.handleException(e));
    }
 }

void handleException(final Throwable e) {
    this.filesMonitoringJpaManager.save(someEntityHere);
    throw new MyException(...)
}

Dies funktioniert für org.springframework.transaction.annotation.Transactional. Wenn Sie verwenden javax.transaction.Transactional, dann können Sie es erreichen , indem Sie dontRollbackOnEigenschaft.

Ich denke du magst

Origin http://10.200.1.11:23101/article/api/json?id=400978&siteId=1
Empfohlen
Rangfolge