2017-11-10 6 views
0

でこのコードはすべてのトランザクションではありません理由:javaxの:Springboot 1.5.7/SpringDataJPA - リポジトリ内のメソッドは、私のリポジトリにデフォルト

public interface ClientRepository extends CrudRepository<Client, Long> { 

//@Transactional 
@Modifying 
@Query("update Client c set c.firstName = ?1, c.lastName = ?2, c.email = ?3 where c.id = ?4") 
void updateClientInfoById(String firstname, String lastname, String email, Long userId); 

は、RESTサービスを使用して(updateClientInfoById)を、この方法を実行する私は、この例外を与えます。 persistence.TransactionRequiredException:更新/削除クエリの実行

@Transactionalを追加する必要があります。

なぜリポジトリのメソッドがすべてデフォルトでトランザクションではないのですか?

ありがとうございます。

答えて

1

デフォルトではCRUDメソッドのみがトランザクションとしてマークされています。カスタムクエリメソッドを使用しているので、明示的にそれを@Transactional注釈でマークする必要があります。春データJPAリポジトリ 実装のCRUDメソッドがすでに@Transactionalでアノテートされているよう

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

Getting started with Spring Data JPA

EDITを参照してください:CRUDメソッドはCrudRepository方法

です
関連する問題