春ブーツ、良いパッケージの総務を持って春データJPA春を使用して私のプロジェクトでは、@Transactionalノートに、トランザクションは、自動的に行わ異常自動ロールバックが、使用時の出会いでいくつかの問題されています。
実行エラーネスティング時間の方法、複数の方法で使用する@Transactional、時間エラーを実行するための方法の一つが、データの挿入が、他の2つの方法がありません。時には例外をスローしますが、ロールバックをしません......
いくつかの情報を確認した、それはSpringの@Transactionalを使用するのは正しくないです。
私は最後にSpringの@Transactionalを使用する方法を説明するために、次の借りに他の人のブログの例を見つけました:
@Service パブリッククラスSysConfigService { @Autowired 、プライベートSysConfigRepository sysConfigRepositoryを 公共SysConfigEntity getSysConfig(文字列のkeyName){ SysConfigEntityエンティティ= sysConfigRepository.findOne(keyNameの)。 エンティティを返します。 } 公共SysConfigEntity saveSysConfig(SysConfigEntityエンティティ){ IF(entity.getCreateTime()== NULL){ entity.setCreateTime(新しいDate())。 } sysConfigRepository.save(エンティティ)を返します。 } @Transactional 公共ボイドtestSysConfig(SysConfigEntityエンティティ)が例外をスロー{ //不会回滚 this.saveSysConfig(エンティティ) 新しい例外(「のsysconfigエラー」)を投げます。 } @Transactional(rollbackFor = Exception.class) 公共ボイドtestSysConfig1(SysConfigEntityエンティティ)例外{スロー //会回滚 this.saveSysConfig(エンティティ) 新しい例外(「のsysconfigエラー」)を投げます。 } @Transactional 公共ボイドtestSysConfig2(SysConfigEntityエンティティ)は例外{スロー //会回滚 this.saveSysConfig(エンティティ) 新しいのRuntimeException(「のsysconfigエラー」)を投げます。 } @Transactional 公共ボイドtestSysConfig3(SysConfigEntityエンティティが){例外をスロー //事务仍然会被提交 this.testSysConfig4(エンティティ) 新しい例外(「のsysconfigエラー」)を投げます。 } @Transactional(rollbackFor = Exception.class) 公共ボイドtestSysConfig4(SysConfigEntityエンティティ)例外{スロー this.saveSysConfig(エンティティ) } }
一般的に使用される概要は春の@Transactionalは次のとおりです。
1. Aの方法は内の例外、A方式は、注釈を付けているだろうスロー @Transactionalノートは、トランザクション伝播が生成され、デフォルトがPropagation.REQUIRED場合は2、ネストされたメソッド呼び出し、複数の 、3の場合にだけ書き込みノート@唯一のRuntimeExceptionではなく、例外のロールバックトランザクションのデフォルトのロールバック
もしロールバックの例外を確認したい場合は4は、あなたが@Transactionalする必要があります(rollbackFor = Exception.class)