2012-10-22 129 views
1

当我坚持使用SimpleJpaRepository#save()的实体时,它不会修改它。例如。它不会设置实体的新ID。SimpleJpaRepository不会修改持久实体

除此之外,一切工作正常。该实体正在被持续并给出一个ID。如果我从数据库中读取它,我可以看到这个ID。这是正常的行为吗?我知道#save方法返回持久实体,但我更喜欢它修改给定的实体。有没有配置这个方法?

感谢

- 编辑

假设这是我做的:

User user = new User(); 
// do something with user 

userRepository.save(user); 

然后user保持不变。对象是写入数据库的,但用户不会被管理。另外saveAndFlush(user)不会导致不同的行为。我可以做的是user = userRepository.save(user)。在这种情况下,用户成为受管实例。但从休眠我习惯只保存对象和我提交的对象变得管理。有没有用JPA来实现这一点的方法?

回答

1

请检查实体中的@Id配置。请确保您已在Id属性上正确定义了@GeneratedValue。该属性在区分insertupdate操作中起着关键作用。

+0

谢谢,但正如我所说的,ID已分配,实体被保存,如果我再次从数据库中读取它,我可以看到ID。这只是''.save()'后才会自动发生' – dwalldorf

+0

@entek尝试'saveAndFlush'。它会立即刷新更改,并且您的返回对象应该有ID,填充。 –

+0

我更新了我原来的帖子,所以我的问题应该更清楚。 – dwalldorf