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
プロパティを。