No @Transactional de trabajo cuando lanzo una excepción en la línea siguiente

GOXR3PLUS:

No entiendo el comportamiento a continuación:

Tengo un método:

@Transactional
public void processRejection(final Path path) {

    try {

        //some code here

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

que llama a la debajo de la cual funciona una savesentidad que no lo hace todavía existe en la base de datos:

void handleException(final Throwable e) {

    this.filesMonitoringJpaManager.save(someEntityHere);

    throw new Exception(...)
}

Ahora el extraño es cuando me comento las throw new Exception(...)las saveobras, pero cuando Descomentar throw new Exception(...) entonces el saveno funciona y no tengo ni idea de por qué?

Lo extraño es que el comportamiento de la APP o de hibernación? ¿Es algo sobre el mecanismo de excepciones de Java, que no entiendo?

Andrónico:

@Transactionaltiene la intención de volver rollo cuando algo va mal (se produce una excepción). Usted está ahorrando una entidad en el catchbloque, pero estás Regeneración de una excepción que causa el método transaccional para volver rollo.

Sin embargo, puede especificar una excepción, que no cause rollback:

@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(...)
}

Esto funciona para org.springframework.transaction.annotation.Transactional. Si usted está utilizando javax.transaction.Transactional, entonces se puede lograr mediante el uso de dontRollbackOnla propiedad.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=400986&siteId=1
Recomendado
Clasificación