JpaRepository,@ Transaction和repository.saveAndFlush

时间:2012-08-25 13:40:10

标签: java spring-data-jpa

我正在接受服务/存储库方法的第一次破解,并遇到了一个问题。基本上我想在我的服务中做的是保持我的实体,然后在同一个Service方法中使用它的ID。

最初我打算使用@GeneratedValue和Sequences,但放弃并决定手动刷新实体并获取ID,我认为这会更容易。

My Repository是一个使用Spring Data的界面,因此它支持手动刷新。据我了解,它也用@Transactional注释。我的服务方法也使用@Transactional注释。

我发现实体仅在返回Service方法时持久化,即使我在保存实体后立即刷新(或使用saveAndFlush)。我认为冲洗会迫使数据库发生变化吗?

2 个答案:

答案 0 :(得分:8)

当你调用save时,Spring-data-jpa返回“future”实体(即带有id),所以:

Foo foo = new Foo();
foo = this.fooRepository.save(foo); // also work on Collections
this.fooRepository.flush();
// use foo.getId();

答案 1 :(得分:3)

调用saveAndFlush方法将起作用!

Foo foo = new Foo();
foo = this.fooRepository.saveAndFlush(foo); 
// use foo.getId();