`

Hibernate中save、persist和saveOrUpdate有何不同

阅读更多

转自:http://blog.csdn.net/vking_wang/article/details/8960406

 

    所有这三个方法,也就是save()、saveOrUpdate()和persist()都是用于将对象保存到数据库中的方法,但其中有些细微的差别。例如,save()只能INSERT记录,但是saveOrUpdate()可以进行记录的INSERT和UPDATE。还有,save()的返回值是一个Serializable对象,而persist()方法返回值为void。

 

save与saveOrUpdate的区别

  •     save通过INSERT语句将对象保存到数据库,产生一个新的ID,将数据插入到数据库,并返回一个Serializable对象。
  •     saveOrUpdate能根据对象是否已存在,而执行插入或更新

显然saveOrUpdate更加灵活,但它需要额外判断对象是否已存在。

 

save与persist的区别

  1. 返回类型不同:save返回Serializable对象,而persist返回void
  2. ID赋值时机不同:二者同样用于将transient实例持久化,但persist不保证ID值立即赋给持久化实例,可能会在flush的时候给ID赋值。
  3. transaction外的行为不同:如果在transaction之外调用,persist保证会立即执行INSERT语句;而save则不保证(save返回一个identifier,如果必须执行INSERT来获取该identifier,则就会立即执行INSERT,而不论是在transaction之内或之外)
  4. 使用场景:由于上述第三点区别,persist方法适用于被扩展的Session上下文的长期运行的会话中(useful in long-running conversations with an extended Session context);而save则不适用。
分享到:
评论

相关推荐

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

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

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

    在Java的持久化框架Hibernate中,实体对象的状态管理和`saveOrUpdate`方法是核心概念,对于理解和有效使用Hibernate至关重要。在本教程中,我们将深入探讨实体对象的三种状态以及`saveOrUpdate`方法的工作原理。 ...

    hibernate 中文文档 and _annotation.chm

    - 插入和更新:使用Session的save()、saveOrUpdate()、persist()方法完成对象的保存。 - 删除:调用Session的delete()方法删除对象。 - 加载和刷新:load()和get()用于根据ID加载对象,refresh()用于刷新对象状态...

    hibernate的各种保存方式的区别

    ### Hibernate的各种保存方式的区别 ...理解这些方法的区别有助于更有效地管理Hibernate中对象的状态,确保数据正确地存储到数据库中。在实际开发中,根据具体的需求选择合适的方法是非常重要的。

    Hibernate 中文api文档下载.zip_API_Hibernate API _hibernate api

    Hibernate通过不同的方法管理对象的状态,如makeTransient()使对象变为瞬时态,saveOrUpdate()根据对象状态决定是保存还是更新,load()和get()分别用于按ID加载已持久化的对象。 总结,Hibernate中文API文档详尽地...

    hibernate第一个hibernate

    - 创建(Create):使用`Session.save()`或`Session.persist()`方法将对象持久化到数据库。 - 读取(Read):`Session.get()`或`Session.load()`用于根据主键获取对象,而`Query`或`Criteria`接口则支持更复杂的...

    Hibernate中对象的三种状态

    本篇将详细阐述Hibernate中的瞬时态、持久态和脱管态,以及它们之间的转换。 1. 瞬时态(Transient): 瞬时态的对象是在内存中创建的,尚未与数据库中的任何记录关联。它们没有持久化标识(ID),在Hibernate的...

    Hibernate基础和入门:新建表和插入表

    8. **对象插入**:使用Session的`save()`或`saveOrUpdate()`方法可以将对象持久化到数据库,`persist()`方法同样可以实现此功能,但在某些情况下行为略有不同。 9. **事务管理**:在Hibernate中,事务是通过Session...

    Hibernate持久化对象的生命周期

    在处理多个Session时,每个Session都有自己的缓存,因此相同的持久化对象可能在不同的Session中有不同的实例。例如,同一个数据库记录可能对应于不同Session缓存中的不同Customer对象。这在并发编程中尤其需要注意,...

    Hibernate三种状态区分

    在 Hibernate 中,对象有三种不同的状态,这些状态决定了对象与数据库之间的关联程度以及如何进行数据操作。理解这些状态对于有效地使用 Hibernate 至关重要。 1. **瞬时态(Transient)**: - 瞬时态的对象是刚刚...

    hibernate三态详解.doc

    Hibernate 提供了多种方法来保存对象,包括 `save()`, `persist()`, `update()`, `saveOrUpdate()`, `merge()` 和 `lock()`。这些方法在不同场景下有不同的作用: - `save()` 和 `persist()`:两者都可以将对象持久...

    hibernate持久化对象生命周期[参照].pdf

    在软件开发领域,尤其是涉及到关系型数据库管理和对象持久化的场景中,Hibernate 是一款广泛应用的Java ORM(对象关系映射)框架。它允许开发者使用面向对象的编程方式来处理数据库操作,极大地简化了数据访问层的...

    Hibernate中文帮助文档

    1. **创建(Create)**:使用`Session.save()`或`Session.persist()`方法将对象保存到数据库。 2. **读取(Read)**:通过`Session.get()`、`Session.load()`或`Query`对象执行HQL(Hibernate查询语言)来获取对象。...

    ORM hibernate。jar包

    8. **实体生命周期**:包括瞬态、持久化、托管和游离状态的转换,例如,通过Session的save()、saveOrUpdate()、persist()方法可以使对象进入持久化状态,update()和merge()方法用于更新已存在的实体。 9. **事件...

    Hibernate之API初识及增删改查实现案例hibernate003

    3. **Session接口**:Session是Hibernate的工作单元,相当于JDBC中的Connection,它提供了与数据库交互的方法,如开始和结束事务、保存、更新、删除对象等。在每次业务操作前后,都需要打开和关闭Session。 4. **...

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

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

    Hibernate 对象的三种状态和特点

    如果想要使对象进入持久状态,需要通过Session的`save()`、`saveOrUpdate()`或`persist()`方法。 2) 持久状态(Persistent State): 一旦对象通过Session的`save()`, `update()`, `load()`等方法被管理,它就会...

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

    在Hibernate框架中,对象的状态管理和保存机制是其核心特性之一,它们直接影响到数据的持久化操作。以下是关于Hibernate中对象的三种状态以及保存方法的详细分析: 1. **对象的三种状态** - **瞬态(Transient)**...

    HIbernate免注解实现操作数据库 及Hibernate3连接SQL的BUG解决办法

    例如,通过`save()`或`saveOrUpdate()`方法保存实体,`get()`或`load()`方法获取实体,`update()`更新实体,`delete()`删除实体。 6. **事务管理**: 数据库操作通常需要在事务中进行,使用Session的`begin...

Global site tag (gtag.js) - Google Analytics