我注意到save(T entity)spring数据JpaRepository中的行为非常奇怪。
我有实体Foo foo,我正在尝试将其保存到存储库中fooRepository.save(foo)。我的问题是,保存后foo,我传递给该save()方法的实例已更改。我没想到这一点,而且我找不到与之相关的任何问题,这让我感到非常奇怪。
这是预期的行为吗?
问题来源:Stack Overflow
我们可以通过首先检查Javadoc for CrudRepository来尝试了解您的观察:
保存给定的实体。将返回的实例用于进一步的操作,因为保存操作可能已完全更改了实体实例。
此处的一种可能解释是,保存时,其他一些线程或进程也已修改了基础实体。这是该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(),它将返回对数据库中的记录/实体进行的任何新的基础更改。因此,您应该检查以了解在后台更新该实体的其他内容。
回答来源:Stack Overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。