当前位置: 首页 > 知识库问答 >
问题:

spring data JPA如何决定调用EntityManager.Persist(…)或EntityManager.Merge(…)方法

洪浩
2023-03-14

共有1个答案

高兴贤
2023-03-14

下面是save方法(在simplejarepository中)的impl:

/*
     * (non-Javadoc)
     * @see org.springframework.data.repository.CrudRepository#save(java.lang.Object)
     */
    @Transactional
    public <S extends T> S save(S entity) {

        if (entityInformation.isNew(entity)) {
            em.persist(entity);
            return entity;
        } else {
            return em.merge(entity);
        }
    }

因此它查看EntityInformation.isNew(entity)。此方法的实现是(在AbstractPersistable):

public boolean isNew() {

        return null == getId();
    }

所以它是根据id字段来决定的

 类似资料:
  • 不确定是否有人遇到过这个问题。我正在使用带有EJB3.1的JBoss7.1应用程序服务器和带有HiberNate实现的JPA2.0。我正在使用后端Oracle 11g数据库。请参阅下面的代码。我正在使用由HTTP GET请求驱动的servlet调用我的EJB。 当我在下面的代码中注释掉 时,我的网页会永远挂起,一段时间后我会得到下面的堆栈跟踪(如果我调试,它会让我直到 persist() 方法,然

  • 我在MongoDB中使用Morphia 0.109。我的文档集合在_id字段中使用字符串值,例如。 当我调用Datastore或BasicDAO save()方法插入其中一个项时,我会按照要求在_id字段(entityId)中填充一个唯一的值。save()方法返回类型为key的值。 我的问题是,如何通过检查返回的键来确定保存操作是成功还是失败?我不能依靠检查Morphia是否填写了_id字段的技巧

  • 问题内容: 只是想了解在AngularJS中使用ngView和ngInclude的方法的确切区别。什么时候在另一个之上使用是正确的?谢谢。 问题答案: ngView与路由配合使用,并且对于角度SPA来说至关重要。它通常用于包含网站的主要内容,即每当用户单击链接时,页眉和页脚之间的位置就会改变。它与路由的集成意味着更改ngView内容也会更改控制器(取决于您的配置)。 ngInclude是通用的包含

  • 我的项目中的三个模型对象(本文末尾的模型和存储库片段)之间确实存在关系。 当我调用时,它会触发三个select查询: (“sql”) (对我来说)那是相当不寻常的行为。在阅读Hibernate文档后,我认为它应该始终使用连接查询。当类中的更改为时,查询没有区别(使用附加选择进行查询),当更改为时,城市类的查询也一样(使用JOIN进行查询)。 当我使用抑制火灾时,有两种选择: 我的目标是在所有情况下

  • 问题内容: 我有一个指令,这是代码: 我想呼吁用户采取行动。操作按钮不在指令上。 从控制器呼叫的最佳方法是什么? 问题答案: 如果要使用隔离作用域,则可以使用来自控制器作用域的变量的双向绑定来传递控制对象。您还可以在页面上使用相同的控件对象来控制同一指令的多个实例。

  • 使用tkinter,如何使用方法定期运行函数? 例如,我有一个只在控制台中打印内容的函数: 如何使用方法每秒调用函数?