`
yingjinsheng
  • 浏览: 25750 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
文章分类
社区版块
存档分类
最新评论

hibernate的各种保存方式的区别

阅读更多

hibernate的保存
hibernate对于对象的保存提供了太多的方法,他们之间有很多不同,这里细说一下,以便区别:
一、预备知识:
在所有之前,说明一下,对于hibernate,它的对象有三种状态,transient、persistent、detached
下边是常见的翻译办法:
transient:瞬态或者自由态
persistent:持久化状态
detached:脱管状态或者游离态

脱管状态的实例可以通过调用save()、persist()或者saveOrUpdate()方法进行持久化。
持久化实例可以通过调用 delete()变成脱管状态。通过get()或load()方法得到的实例都是持久化状态的。
脱管状态的实例可以通过调用 update()、0saveOrUpdate()、lock()或者replicate()进行持久化。

save()和persist()将会引发SQL的INSERT,delete()会引发SQLDELETE,
而update()或merge()会引发SQLUPDATE。对持久化(persistent)实例的修改在刷新提交的时候会被检测到,
它也会引起SQLUPDATE。saveOrUpdate()或者replicate()会引发SQLINSERT或者UPDATE

二、save 和update区别
把这一对放在第一位的原因是因为这一对是最常用的。
save的作用是把一个新的对象保存
update是把一个脱管状态的对象保存

三,update 和saveOrUpdate区别
这个是比较好理解的,顾名思义,saveOrUpdate基本上就是合成了save和update
引用hibernate reference中的一段话来解释他们的使用场合和区别
通常下面的场景会使用update()或saveOrUpdate():
程序在第一个session中加载对象
该对象被传递到表现层
对象发生了一些改动
该对象被返回到业务逻辑层
程序调用第二个session的update()方法持久这些改动

saveOrUpdate()做下面的事:
如果对象已经在本session中持久化了,不做任何事
如果另一个与本session关联的对象拥有相同的持久化标识(identifier),抛出一个异常
如果对象没有持久化标识(identifier)属性,对其调用save()
如果对象的持久标识(identifier)表明其是一个新实例化的对象,对其调用save()
如果对象是附带版本信息的(通过<version>或<timestamp>) 并且版本属性的值表明其是一个新实例化的对象,save()它。
否则update() 这个对象

四,persist和save区别
这个是最迷离的一对,表面上看起来使用哪个都行,在hibernate reference文档中也没有明确的区分他们.
这里给出一个明确的区分。(可以跟进src看一下,虽然实现步骤类似,但是还是有细微的差别)

分享到:
评论

相关推荐

    hibernate调用存储过程

    hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程

    Hibernate存储Clob字段的方式总结

    Hibernate存储Clob字段的方式总结涉及了在Java开发中使用Hibernate操作大型文本字段Clob的操作方法。本文主要介绍了两种操作Clob字段的方法,一种是将Clob字段直接映射为String类型,另一种是使用Clob类型进行处理。...

    Hibernate主键生成方式

    当Hibernate保存一个新实体时,数据库会自动为该实体分配一个新的唯一值。这种方式适用于那些支持自动增长字段的数据库,如MySQL和SQL Server。 2. **Increment方式**:`&lt;generator class="increment"/&gt;` 这种方式...

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

    **保存方法的区别:** - **save()**: 用于将瞬时对象持久化,如果对象已经具有数据库ID(即之前是持久化的对象),则可能会导致重复的记录。 - **update()**: 更新数据库中已存在的记录,适用于已知对象是持久的,但...

    Hibernate使用存储过程

    在IT领域,尤其是在Java开发中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式操作数据库。尽管ORM的核心是将Java对象映射到数据库表,但有时我们还需要直接利用数据库提供的...

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

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

    spring hibernate执行存储过程的例子

    Spring和Hibernate是Java开发中常用的两个框架,它们提供了对存储过程的支持。本文将深入探讨如何在Spring和Hibernate中执行存储过程,并基于描述中的例子进行解析。 首先,让我们了解Spring如何执行存储过程。...

    hibernate调用存储过程的方法调用

    Hibernate作为Java领域内广泛使用的对象关系映射(ORM)框架,提供了调用数据库存储过程的能力。本文将深入探讨如何使用Hibernate调用存储过程,并结合提供的资源文件——`proc.sql`、`hibernateProc.sql`和`...

    hibernate框架调用存储过程

    本篇文章将深入探讨如何在Hibernate框架中调用存储过程,并与JDBC调用存储过程的方式进行比较。 首先,我们要了解存储过程是什么。存储过程是预编译的SQL语句集合,存储在数据库服务器中,可被多次调用,减少了网络...

    hibernate存储过程

    在IT领域,Hibernate是一个非常流行的Java对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。而"hibernate存储过程"是指使用Hibernate来调用数据库中的存储过程。存储过程...

    hibernate调用存储过程具体方法

    hibernate本对数据库的操作有些不完美,有必要的时候可以调用存储过程来补足。

    Hibernate下数据批量处理解决方案

    在Java开发中,尤其是涉及到大数据量的处理时,人们往往会质疑ORM框架,如Hibernate,是否适合进行批量数据操作。然而,实际上,通过适当的技术手段,我们可以有效地解决Hibernate在批量处理时可能出现的性能问题。...

    hibernate保存图片

    ### Hibernate保存图片知识点详解 #### 一、引言 在Web开发中,处理用户上传的图片是一项常见的需求。本文档将详细介绍如何利用Hibernate框架将图片数据直接存储到数据库的Blob字段中。通过这种方式,可以避免在...

    Hibernate Hibernate5 讲义 PDF

    Hibernate是一个开源的对象关系映射(ORM)框架,它封装了JDBC(Java Database Connectivity)的复杂性,并允许Java开发者以面向对象的方式操作数据库。Hibernate框架被广泛应用于企业级Java应用程序中,可以与...

    kingbaseV8 hibernate jdbc 驱动

    例如,`hibernate-core-5.0.12.Final.jar`是Hibernate 5.0系列的一个稳定版本,包含了对JPA 2.1的支持以及各种性能优化。而较早的版本如`hibernate3.jar`和`hibernate-3.1.jar`则对应Hibernate 3.x系列,其功能可能...

    hibernate3 hibernate3

    2. 表映射(Mapping):Hibernate使用XML或注解方式将实体类映射到数据库表。例如,使用@Table注解指定对应的表名,@Column注解定义列属性。 3. 主键(Primary Key):每个实体都应有一个唯一的标识符,通常由@Id...

Global site tag (gtag.js) - Google Analytics