4

我正在第一次尝试服务/存储库方法并且遇到了一个问题。基本上我想在我的服务中做的是持久化我的实体,然后在同一个服务方法中使用它的 ID。

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

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

我发现该实体仅在返回 Service 方法时才会保留,即使我在保存实体后立即刷新(或使用 saveAndFlush)也是如此。我认为冲洗会迫使数据库更改?

4

2 回答 2

9

当您调用 save 时,Spring-data-jpa 返回“未来”实体(即带有 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 回答