0

Spring Data JPA リファレンス(以前のHades ) から、

リポジトリ インスタンスの CRUD メソッドは、デフォルトでトランザクション対応です。

メソッドが複数のリポジトリをカバーする場合、例:

@Transactional
public void addRoleToAllUsers(String roleName) {
    Role role = roleRepository.findByName(roleName);
    for (User user : userRepository.readAll()) {
        user.addRole(role);
        userRepository.save(user);
    }
}

参照状態

リポジトリでのトランザクション構成は無視され、外部のトランザクション構成によって実際に使用されるトランザクション構成が決定されます。

内部トランザクションが無視される動作は、デフォルトのSpringトランザクション動作ですか、実際にはSpring Data JPAによって明示的に処理されますか?

4

3 に答える 3

2

これはデフォルトの動作です。

ご覧のように、 のメソッドにはデフォルトで伝播のJpaRepository注釈が付けられています ( )。これは、その伝播タイプの通常の動作です ( 10.5.7 トランザクションの伝播を参照)。@TransactionalREQUIRED

于 2011-04-15T14:10:59.073 に答える
1

@Transactionalat the / JpaRepositorythe 実装クラスにより、これらのメソッドはデフォルトで単に外部トランザクションに参加します。したがって、「ネグレクト」が誤解を招く言葉だと思われる場合は、気軽に JIRA を開いてください (ある程度はそうだと思います ;))。

CRUD メソッドのトランザクションの構成を変更したい場合は、具体的なリポジトリ インターフェイス内で CRUD メソッドを再宣言し、必要な構成を@Transactional含む を追加するだけで実行できます。詳細については、リファレンス ドキュメントを参照してください。

于 2011-07-04T12:51:19.953 に答える
0

それはすべて @Transactional アノテーションで設定された伝播に依存します。デフォルトでは、 に設定されてREQUIREDいます。つまり、トランザクション コンテキストがない場合は作成し、メソッドの最後でコミットします。それ以外の場合は、既存のトランザクション コンテキスト内にメソッド呼び出しを含めます。

他にも、REQUIRES_NEW、SUPPORTS、NEVER などがあります。詳細については、 http ://static.springsource.org/spring/docs/3.0.x/api/org/springframework/transaction/annotation/Propagation.html を参照してください。

于 2011-04-15T14:11:41.297 に答える