`
ghsea
  • 浏览: 111898 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

save(),update(),saveOrUpdate()

阅读更多
1.save()导致的最终结果是执行insert语句,先看下面的代码:
 
  1. Session session2=HibernateUtil.getSession();  Customer c2=(Customer)session2.load(Customer.classnew Long(5));  
  2. HibernateUtil.closeSession(session2);  
  3. c2.setName("ghsea5");  
  4. session.save(c2);  
  5. tx.commit();  
       这里查询出的是ID为5的一个对象,执行session.save(c2)后数据库里会插入一条ID为6的数据,如果只是想修改这个ID为5的对象的name属性,而不是新插入一条数据,可以执行session.flush(),使session与数据库同步。不要错误地用save()去同步session缓存和数据库。它只是用来保存一个记录的,是用来“Persist the given transient instance, first assigning a generated identifier”。

update和saveOrUpdate是用来对跨Session(即脱 管的)的PO进行状态管理的。
2.“update的作用就在于此,它只会被用于当一个PO对象跨Session进行状态同步的时候才需要写。而一个PO对象当它不需要跨Session进行状态管理的时候,是不需要写update的。”
  1. tx=session.beginTransaction();  
  2. Session session2=HibernateUtil.getSession();  
  3. Customer c2=(Customer)session2.load(Customer.classnew Long(5));  
  4. HibernateUtil.closeSession(session2);  
  5. c2.setName("ghsea5");  
  6. session.update(c2);  
  7. tx.commit();  
      执行第4行后,
c2变成脱管对象,第6行,用session对以c2进行更新,这里c2是跨Session的。

3.saveOrUpdate和update的区别就在于在跨Session的PO状态管理中,Hibernate对PO采取何种策略。
 
  1. public void addMate(Grade cat, Student mate) {    
  2.       Session session = ...;    
  3.       Transacton tx = ...;    
  4.       session.saveOrUpdate(cat);    
  5.       cat.addMate(mate);    
  6.       tx.commit();    
  7.       session.close();    
  8. };    
        上面这些代码用到saveOrUpdate是合理的,如果用save()不一定合适,试想一下,如果只是想给一个存在的Grade(班级)添加一个Srudent,用save()导致的结果将是向数据库中插入一条新的记录,即一个新的班级,而saveOrUpdate的策略是,如果该对象的ID已经存在,则执行update(),如果该对象的ID不存在,则用save()策略。
        Hibernate此时究竟采取更新cat对象,还是save cat对象,取决于unsave-value的设定。如下面这样设定unsave-value:
分享到:
评论

相关推荐

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

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

    Hibernate merge、update与saveOrUpdate方法的区别

    `saveOrUpdate` 方法结合了`save`和`update`的功能,它可以智能地判断对象是应该被插入还是更新。如果对象的标识符在数据库中不存在,则执行插入操作;如果存在,则执行更新操作。具体而言: - **新对象**:如果...

    hibernate 的saveOrUpdate

    5. **节省代码**:使用`saveOrUpdate`可以减少代码量,因为无需先判断对象是否已存在,再分别调用`save`或`update`方法。 6. **潜在问题**:虽然`saveOrUpdate`方便,但有时可能导致意料之外的行为,比如在不知道...

    Hibernate save() saveorupdate()的用法第1/2页

    ### Hibernate中的`save()`与`saveOrUpdate()`方法详解 #### 一、概述 在Java持久化框架Hibernate中,`save()`与`saveOrUpdate()`是非常重要的两个方法,它们用于处理对象的持久化操作。理解这两个方法的工作原理...

    mysql 原生语句中save 的写法汇总.docx

    使用 Hibernate 可以使用 saveOrUpdate 方法,但是使用原生 SQL 语句时,该如何实现 save 操作呢?今天,我们将讨论 MySQL 中 save 的写法汇总。 使用 IGNORE 关键字实现数据不存在则插入,存在则无操作 在 MySQL ...

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

    `saveOrUpdate`是Hibernate提供的一个便捷方法,它的主要作用是根据对象当前的状态来决定执行`save()`还是`update()`操作。具体来说: - 如果对象是瞬时状态,`saveOrUpdate`会调用`save()`,为对象生成一个新的...

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

    ### Save和SaveOrUpdate方法的区别 - **Save方法**:用于保存瞬时对象。如果尝试对已存在ID的对象使用此方法,不会更新现有记录,而是新增一条记录。 - **SaveOrUpdate方法**:更灵活,能根据对象状态决定是否插入...

    Hibernate入门文档

    Hibernate 难点解析: hibernate中uuid和native的相关总结 Hibernate get与load的区别 hibernate二级缓存中list和iterator的用法 ...lock和update区别 save 和update区别 update 和saveOrUpdate区别

    hibernate的各种保存方式的区别

    脱管状态的对象可以通过调用`save()`、`persist()`或者`saveOrUpdate()`方法重新变为持久化状态。 #### 二、save 和 update 区别 - **save** 方法主要用于将一个瞬态对象保存到数据库中。当调用此方法时,...

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

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

    hibernate各种常用方法的详解

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

    Hibernate持久层方法汇总

    本文将详细介绍Hibernate持久层中的一些核心方法,包括`session.load`, `session.find`, `session.iterator`, `session.save`, `session.update`, `session.saveorupdate`。 1. `session.load()`: - `load()`方法...

    Nhibernate实验工程

    - **Insert**: 使用Session的Save或SaveOrUpdate方法插入新对象到数据库。 - **Update**: 当对象状态改变时,调用Session的Update方法同步数据库。 - **Delete**: 调用Session的Delete方法移除对象。 - **Query**: ...

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

    - saveOrUpdate():这是一个合并save()和update()功能的方法。如果对象是新的,它将执行INSERT,如果对象已经存在于数据库中,它将执行UPDATE。 - merge():此方法将游离对象的状态合并到持久化对象中,如果对象...

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

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

    Hibernate三种状态

    其次,持久状态(Persistent)意味着对象已经通过Session的save()、saveOrUpdate()等方法保存到数据库,并且仍然在Hibernate的缓存管理中。在这种状态下,对象的任何改动在事务提交时会被自动同步到数据库。例如,...

    Hibernate 映射关系! 基础封装

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

Global site tag (gtag.js) - Google Analytics