私は次の行に例外をスローしたときに動作していない@Transactional

GOXR3PLUS:

私は以下の行動を理解していません。

私は方法があります:

@Transactional
public void processRejection(final Path path) {

    try {

        //some code here

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

これはないその下呼び出しsavesまだデータベース内に存在しないエンティティ。

void handleException(final Throwable e) {

    this.filesMonitoringJpaManager.save(someEntityHere);

    throw new Exception(...)
}

今、私はとき奇妙であるコメント作品を、私は時にコメントを外し、その後に動作していない私は何の手掛かり理由を持っていませんか?throw new Exception(...)save throw new Exception(...)save

JPAやHibernateのからそれがどのような奇妙な行動とは?それは私が理解していないJavaの例外メカニズムについての何かか?

アンドロニカス:

@Transactional何かがうまくいかないとき(例外がスローされます)ロールバックするためのものです。あなたには、エンティティを保存しているcatchブロックしますが、ロールバックにトランザクション方法を引き起こした例外を再スローしています。

しかし、あなたは例外を指定することができ、それは、ロールバックが発生しません。

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

これがために働きますorg.springframework.transaction.annotation.Transactionalあなたが使用している場合javax.transaction.Transactional、あなたは使用してそれを達成することができますdontRollbackOnプロパティを。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=400983&siteId=1