我正在接受服务/存储库方法的第一次破解,并遇到了一个问题。基本上我想在我的服务中做的是保持我的实体,然后在同一个Service方法中使用它的ID。
最初我打算使用@GeneratedValue和Sequences,但放弃并决定手动刷新实体并获取ID,我认为这会更容易。
My Repository是一个使用Spring Data的界面,因此它支持手动刷新。据我了解,它也用@Transactional注释。我的服务方法也使用@Transactional注释。
我发现实体仅在返回Service方法时持久化,即使我在保存实体后立即刷新(或使用saveAndFlush)。我认为冲洗会迫使数据库发生变化吗?
答案 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();