Ser*_*hyr 4 java spring hibernate jpa spring-data
我注意到save(T entity)spring-data JpaRepository 中有一个非常奇怪的行为。
我有实体Foo foo,我正在尝试使用 repository 保存它fooRepository.save(foo)。我的问题是,保存后foo,我传递给save()方法的实例已更改。我不指望这个,我很奇怪我找不到任何与它相关的问题。
这是预期的行为吗?
我们可以通过首先检查CrudRepository的Javadoc来尝试理解您的观察:
保存给定的实体。使用返回的实例进行进一步的操作,因为保存操作可能已经完全改变了实体实例。
一种可能的解释是,当您保存时,某个其他线程或进程也修改了底层实体。以下是该save()方法的实际作用:
@Transactional
@Override
public <S extends T> S save(S entity) {
if (entityInformation.isNew(entity)) {
em.persist(entity);
return entity;
} else {
return em.merge(entity); // <-- this is your use case
}
}
Run Code Online (Sandbox Code Playgroud)
它将调用em.merge(),它将返回对数据库中的记录/实体所做的任何新的底层更改。因此,您应该检查看看还有什么可能在后台更新此实体。
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |