2012-08-25 180 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();