4

私はサービス/リポジトリのアプローチに最初の亀裂を入れており、問題に直面しています。基本的に、サービスで実行したいのは、エンティティを永続化し、同じサービスメソッドでそのIDを使用することです。

もともとは@GeneratedValueとSequencesを使用するつもりでしたが、あきらめてエンティティを手動でフラッシュし、IDを取得することに決めました。これは簡単だと思いました。

MyRepositoryはSpringDataを使用するインターフェースであるため、手動フラッシュをサポートしています。私が理解しているように、@Transactionalという注釈も付けられています。MyServiceメソッドにも@Transactionalという注釈が付けられています。

私が見つけたのは、エンティティを保存した直後にフラッシュした場合でも(または、saveAndFlushを使用した場合でも)、Serviceメソッドが戻ったときにのみエンティティが保持されることです。フラッシュするとDBの変更が強制されると思いましたか?

4

2 に答える 2

9

Spring-data-jpaは、saveを呼び出すと、「future」エンティティ(つまり、id)を返します。

Foo foo = new Foo();
foo = this.fooRepository.save(foo); // also work on Collections
this.fooRepository.flush();
// use foo.getId();
于 2012-08-25T13:45:31.350 に答える
3

saveAndFlushメソッドを呼び出します。

Foo foo = new Foo();
foo = this.fooRepository.saveAndFlush(foo); 
// use foo.getId();
于 2013-09-17T11:45:43.367 に答える