`

update/saveOrUpdate/merge

 
阅读更多

通常下面的场景会使用update()saveOrUpdate()

  • 程序在第一个session中加载对象

  • 该对象被传递到表现层

  • 对象发生了一些改动

  • 该对象被返回到业务逻辑层

  • 程序调用第二个session的update()方法持久这些改动

saveOrUpdate()做下面的事:

  • 如果对象已经在本session中持久化了,不做任何事

  • 如果另一个与本session关联的对象拥有相同的持久化标识(identifier),抛出一个异常

  • 如果对象没有持久化标识(identifier)属性,对其调用save()

  • 如果对象的持久标识(identifier)表明其是一个新实例化的对象,对其调用save()

  • 如果对象是附带版本信息的(通过<version><timestamp>) 并且版本属性的值表明其是一个新实例化的对象,save()它。

  • 否则update() 这个对象

merge()可非常不同:

  • 如果session中存在相同持久化标识(identifier)的实例,用用户给出的对象的状态覆盖旧有的持久实例

  • 如果session没有相应的持久实例,则尝试从数据库中加载,或创建新的持久化实例

  • 最后返回该持久实例

  • 用户给出的这个对象没有被关联到session上,它依旧是脱管的

分享到:
评论

相关推荐

    Hibernate merge、update与saveOrUpdate方法的区别

    ### Hibernate merge、update与saveOrUpdate方法的区别 在Hibernate框架中,`merge`、`update`与`saveOrUpdate`这三个方法都是用于更新或保存实体对象到数据库中的,但它们之间存在着重要的区别,这些区别主要体现...

    save, saveOrUpdate, persist, merge, update 区别.docx

    在Java的持久化框架Hibernate中,管理对象与数据库之间的交互是通过一系列的方法完成的,其中包括`save()`, `saveOrUpdate()`, `persist()`, `merge()`, 和 `update()`。这些方法各有其特点和适用场景,理解它们的...

    merge的注意事项

    `merge()`会先尝试查找具有相同标识符的对象,如果找到则更新,未找到则插入,而`saveOrUpdate()`则会直接调用`save()`或`update()`方法,其行为可能依赖于对象的状态。 ### 与SaveOrUpdate的区别 `saveOrUpdate()...

    05_传智播客hibernate教程_实体对象的三种状态与saveOrUpdate方法

    在实际开发中,为了更好地控制数据操作,通常建议明确使用`save()`, `update()`和`merge()`方法,以便更清晰地表达你的意图。此外,利用`SessionFactory`创建的`Session`对象和事务管理也是理解Hibernate工作流程的...

    支持多数据库的ORM框架ef-orm.zip

    事实上针对单个对象的get/load/persist/save/update/merge/saveOrUpdate API和Criteria API本来就为一体,只不过是历史的原因被人为割裂成为两套数据库操作API罢了。  因此,对于关系型数据库而言——Entity和...

    hibernate各种常用方法的详解

    本文将详细介绍 Hibernate 中常用的几种方法,包括 `save`, `update`, `saveOrUpdate`, `merge` 等,帮助开发者更深入地理解 Hibernate 的工作原理及其使用方式。 #### 二、Hibernate 对象状态管理 在 Hibernate ...

    Spring mvc+hibernate例子(包括登录、增删改查等简单功能)

    - 调用 DAO 的 `update()` 或 `merge()` 方法更新对象。 5. **查询功能:** - 可以使用 Hibernate 的 `Query` 或 `Criteria` API 实现简单的查询,也可以自定义复杂的 HQL 查询。 - 结果集返回给 Controller,再...

    hibernate帮助文档

    常见的级联类型有:save-update、merge、delete、all、none等。 七、缓存机制 Hibernate 提供了缓存策略以优化性能,包括第一级缓存(Session缓存)和第二级缓存(可选,跨Session共享)。 八、延迟加载(Lazy ...

    Hibernate 映射关系! 基础封装

    `save()`、`update()`、`saveOrUpdate()`、`persist()`和`merge()`是Hibernate中用于处理对象状态变化的主要方法。 - **save()**:保存一个新的瞬态对象到数据库,生成并返回主键标识符。如果对象已存在,可能会...

    Hibernate三种状态

    脱管对象可以通过Session的merge()方法重新与Session关联,使其变回持久状态,或者通过update()或saveOrUpdate()方法将更改同步到数据库。 转换关系如下: 1. 瞬时对象可以通过Session的save()或saveOrUpdate()方法...

    Java最新2023年面试题附答案解析,大汇总.md

    Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法分别是做什么的?有什么区别 用代码演示三种代理 stackoverflow错误,permgen space错误 分代收集算法 同步方法和同步块,哪个是更...

    hibernate的各种保存方式的区别以及hibernate对象的三种状态[定义].pdf

    - saveOrUpdate()则更智能,它会根据对象是否有持久化标识和版本信息来决定是执行INSERT还是UPDATE。 理解这些概念和方法对于有效地使用Hibernate进行数据持久化至关重要。在实际开发中,选择合适的方法取决于对象...

    西安领航核心项目Hibernate部分重点、难点总结

    - **Merge和Update**:Merge可以将离线对象的状态合并到Session中,如果存在ID冲突,会更新原有对象;Update则直接更新对象,但不能处理ID冲突问题。 ### Save、Update、Delete方法的执行顺序及Flush方法 在事务中...

    JAVA面试问题及答案.docx

    此外,Session还提供了save()、update()、merge()、lock()、saveOrUpdate()和persist()等方法来管理对象的状态。save()和persist()用于将瞬时态对象转变为持久态,而update()和merge()则用于更新游离态对象。merge()...

    hibernate对象三种状态

    若想更新数据库,可以重新打开Session,然后调用Session的update()或merge()方法。同样,如果不再需要对象与数据库的关联,可以调用Session的evict()方法将其变为自由态。 ### 代码示例 在实际开发中,通常会通过...

    Hibernate对象状态以及各种保存方法的区别

    - 可以通过 `Session` 的 `update()`、`saveOrUpdate()` 或 `merge()` 方法将脱管对象重新关联到 `Session`,并更新为持久对象。 **保存方法的区别:** - **save()**: 用于将瞬时对象持久化,如果对象已经具有...

    java框架方面面试题

    最后,Hibernate中Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法的功能与区别也是面试中常考的点。Hibernate定义了对象的三种状态:瞬时态、持久态和游离态。瞬时态对象是指刚被创建...

    Hibernate的各种保存方式的区别详解

    Hibernate提供了多种保存方式,包括save()、persist()、update()、saveOrUpdate()等,了解这些方法的区别非常重要,以便正确使用它们。本文将对Hibernate的各种保存方式进行详细的比较和分析。 一、预备知识 在...

    hibernate资料

    通过掌握`update()`、`saveOrUpdate()`和`merge()`等方法的使用,开发者可以更加灵活地处理各种场景下的数据更新需求。这些知识点不仅有助于提高代码的可维护性和性能,也是深入学习Hibernate框架的基础。

    Hibernate中po对象的三种状态分析[借鉴].pdf

    - **saveOrUpdate()**:根据对象是否存在持久化标识来决定执行save()或update(),适用于不确定对象状态的情况。 - **merge()**:将脱管对象的状态合并到当前Session的持久化副本中,然后更新数据库。如果对象不...

Global site tag (gtag.js) - Google Analytics