2012-08-25 209 views
4

我正在采取第一次服务/存储库方法并且遇到问题。基本上我想在我的服务中做的是坚持我的实体,然后在相同的服务方法中使用它的ID。JpaRepository,@Transaction和repository.saveAndFlush

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

My Repository是一个使用Spring Data的接口,所以它支持手动刷新。据我了解,它也被注释@Transactional。我的服务方法也用@Transactional注解。

我发现实体只在返回Service方法时持久化,即使在保存实体后立即刷新(或使用saveAndFlush)。我认为冲洗会强制数据库更改?

回答

8

弹簧数据的JPA返回的“未来”实体(ID为即)当你调用保存,所以:

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

通话saveAndFlush方法将工作!

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