开发者社区> 问答> 正文

spring-data JpaRepository save()方法的副作用

我注意到save(T entity)spring数据JpaRepository中的行为非常奇怪。

我有实体Foo foo,我正在尝试将其保存到存储库中fooRepository.save(foo)。我的问题是,保存后foo,我传递给该save()方法的实例已更改。我没想到这一点,而且我找不到与之相关的任何问题,这让我感到非常奇怪。

这是预期的行为吗?

问题来源:Stack Overflow

展开
收起
montos 2020-03-27 22:53:36 1405 0
1 条回答
写回答
取消 提交回答
  • 我们可以通过首先检查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

    2020-03-27 22:54:12
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载

相关实验场景

更多