ロールバックをさせたいですが、やり方がわかりません。
参考になるサイトなどがありましたら教えてください。
オフィシャルな情報ではこちらのサイトになります。
Spring Data JPA - Reference Documentation
それ以外で分かりやすく説明されているサイトではこちらになるかと思います。
Springでトランザクション管理
説明されている通り、明示的にロールバックさせたい場合は非検査例外をスローします。
Java
1@Transactional(readOnly = false)
2public void updateHoge(Hoge hoge) {
3
4 // ... なんらかの入力チェック
5 if (hoge is null) {
6 // ロールバックする
7 throw new RuntimeException();
8 }
9
10 // ... 後続の処理
11
12}
また、この記事の中でロールバックの注意点として
ただし、ロールバックの注意点として、非検査例外(RuntimeException及びそのサブクラス)が発生した場合はロールバックされるが、検査例外(Exception及びそのサブクラスでRuntimeExceptionのサブクラスじゃないもの)が発生した場合はロールバックされずコミットされる。
と書かれていますが、1次情報として確認できるのはJavaDocです。
Annotation Type Transactional
rolbackFor
Defines zero (0) or more exception classes, which must be subclasses of Throwable, indicating which exception types must cause a transaction rollback.
By default, a transaction will be rolling back on RuntimeException and Error but not on checked exceptions (business exceptions). See DefaultTransactionAttribute.rollbackOn(Throwable) for a detailed explanation.
transctionalアノテーションでの注意点として、同名のアノテーションが2つあります。
Springフレームワーク内ではSpring Frameworkが提供するtransactionalアノテーションを使う必要があります。
- javax.transaction.Transactional
- org.springframework.transaction.annotation.Transactional
また、TransactionManagerを使う必要があるかについても知りたいです。
JpaRepository(またはEntityManager)とTransactionalアノテーションを使ったトランザクション制御では、あえて明示的に使う必要性はないと思いますが、これら以外の方法でトランザクション制御を行いたい場合は使うことになるということだと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/23 02:13