2016-04-15 11 views
2

Springデータを使用する場合、CrudRepositoryを拡張することができます。CrudRepository .delete()メソッドはトランザクション処理されていますか?

このリポジトリ.delete()のメソッドは「どのように」機能しますか?

また、この方法はTransactionalですか?この場合、Spring-dataを使用する場合は、@Transactional注釈を使用する必要があります。

たとえば、@Transactionalが必要ですか? :

拡張CrudRepository:

public interface PersonRepository extends CrudRepository<Person, Integer> { 

} 

サービスクラスでメソッドを削除する使用:

@Transactional 
public void deletePerson(Person person) { 

     personRepository.delete(person); 
    } 

編集:どのよう@Transactional作業ここでしょうか?

@Transactional 
    public void deletePersonAndTable(Person person, Table table) { 

      personRepository.delete(person); 

      tableRepository.delete(Table); 

     } 
+0

"_extend the CrudRepository_"を定義します。あなたのサンプルコードはそれを正確に実行しています。いいえ?トランザクションはデータベースで何かをする必要があるので、ここで '@ Transactional'アノテーションの必要はありません。複数のDAO操作を1つのトランザクションにグループ化する必要があります。 –

+0

'@ Transactional'を削除して、トランザクションがコミットされているかどうか確認しましたか? –

+0

@BoristheSpiderは私のリポジトリがCrudRepositoryをどのように拡張しているかを示していますか?あなたは、あなたが意味することを定義してください: "複数のDAO操作を1つのトランザクションにグループ化する必要がありますか?"ありがとう – java123999

答えて

3

自分で@Transactional注釈を追加する必要はありません。 https://spring.io/blog/2011/02/10/getting-started-with-spring-data-jpa/から

:春データJPAリポジトリ 実装のCRUDメソッドがすでに@Transactionalでアノテートされているよう

さらに、我々は 方法のために@Transactional注釈を取り除くことができます。

ただし、いくつかのアクションを連続して実行する必要がある場合は、すべてを一緒に実行するか、まったく実行しないでください(これがトランザクションの対象です)。

+0

ありがとう、あなたの答えに関連して:あなたは私の編集を見てください、このケースで@transactionalがどのように動作するのかわかりませんか? – java123999

+0

tansactional anotationトランザクションが存在しない場合、トランザクションにcontexteがない場合はトランザクションをオープンします。 –

+0

@Mr_Thorynqueこれは一般的な場合には本当に当てはまりません。たとえば、JTAを使用しておらず、別のトランザクション・リソースにオープン・トランザクションがある場合です。 –

関連する問題