2017-12-14 11 views
2

簡体例:(私が正しく取引を理解している場合)は、メソッドは@Transactionalで注釈されていない(と私は実際にそれを希望として私は、それが失敗すると予想しているでしょうが、コントローラの作品からfooService.save(myNewFoo)を呼び出すなぜ@Transactionalなしで保存できますか?

@Entity 
public class Foo { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Integer id; 
    private String bar; 

    // getters + setters 

} 

public interface FooRepository extends CrudRepository<Foo, Integer> { 
} 

@Service 
public class FooService { 

    private final FooRepository repository; 

    public FooService(FooRepository repository) { 
    this.repository = repository; 
    } 

    public Foo save(Foo foo) { 
    return repository.save(foo); 
    } 

} 

失敗する)。なぜこのような振る舞いですか?シーンを扱うトランザクションを作成するのは誰ですか?これを避ける方法は?

その他の詳細:

  • のJava 9
  • のMySQLコネクタ6.0.6
  • 休止5.2.12
  • 春ブーツ2.0.0.M7
  • 春データJPA 2.0.2。リリース
+0

デフォルトでは、CrudRepositoryとfriendsのメソッドは '@ Transactional'です。 –

+0

@ M.Deinum '@ Transactional'にすることはできません。実装全体を自分で書き換えることは別ですか?私は、私のサービスがトランザクションを担当することを望み、そうでなければ失敗します。 – sp00m

+0

@ M.Deinum「SimpleJpaRepository」を拡張し、何らかの形で「@ Transaction」を無効にできますか? – sp00m

答えて

0

春に提供されたCrudRepository#saveの実装デフォルトでトランザクションを作成します。詳細はthe documentationをご覧ください。

関連する問題