2
0

More than 1 year has passed since last update.

【Spring】@Transactional関連メモ

Last updated at Posted at 2021-10-05

① ロールバックするタイミングは「非検査例外が発生したときのみ」

  → rollbackForプロパティで指定した検査例外はロールバック対象とすることができる

@Transactional(rollbackFor=Exception.class)

@Transactionalはpublicメソッドにつけた時のみロールバック有効


@Transactionalを付けたpublicメソッドは別クラスからの呼び出し時のみロールバック有効


④ 外部トランザクションが開始している場合はそのトランザクションを利用する

  → propagationプロパティで制御。デフォルト値(PROPAGATION_REQUIRED)が外部トランザクションをそのまま利用する設定となっている


@Transactionalをつけなかった場合、トランザクションは発生しない?

前提

・Spring Data JPAを利用している
・RepositoryクラスはCrudRepositoryインタフェースを継承している(↓みたいに)

@Repository
public interface HogeRepository extends CrudRepository<HogeEntity, String> 
結論

・トランザクションは「Repositoryクラスのメソッド」に対して適用される。

詳しく

・CrudRepositoryインタフェースのデフォルト実装は「SimpleJpaRepositoryクラス」であり、このSimpleJpaRepositoryクラスのCRUDメソッド(save/update/find/delete等)に@Transactinalがついている
image.png

※SimpleJpaRepositoryの公式ドキュメント
https://spring.pleiades.io/spring-data/jpa/docs/current/api/org/springframework/data/jpa/repository/support/SimpleJpaRepository.html

CrudRepository インターフェースのデフォルト実装。これにより、プレーンな EntityManager よりも洗練されたインターフェースが提供されます。


参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0