[英]spring-data JpaRepository save() method side effect
我注意到 spring-data JpaRepository 中的save(T entity)
有一个非常奇怪的行为。
我有实体Foo foo
并且我正在尝试使用存储库fooRepository.save(foo)
保存它。 我的问题是,保存后,我传递给save()
方法的foo
实例发生了变化。 我不指望这个,我很奇怪我找不到任何与它相关的问题。
这是预期的行为吗?
我们可以通过首先检查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
}
}
它将调用em.merge()
,它将返回对数据库中的记录/实体所做的任何新的底层更改。 因此,您应该检查看看还有什么可能在后台更新此实体。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.