Hibernate save基础简介

开发 后端
这里介绍saveOrUpdate基本上就是合成了save和update,而update只是update;引用Hibernate reference中的一段话来解释他们的使用场合和区别。

Hibernate有很多值得学习的地方,这里我们主要介绍Hibernate save,包括介绍Hibernate saveOrUpdate等方面。

在所有之前,说明一下,对于Hibernate,它的对象有三种状态,transient、persistent、detached

下边是常见的翻译办法:
◆transient:瞬态或者自由态(new DeptPo(1,”行政部”,20,”行政相关”),该po的实例和session没有关联,该po的实例处于transient)
◆persistent:持久化状态(和数据库中记录想影射的Po实例,它的状态是persistent, 通过get和load等得到的对象都是persistent)
◆detached:脱管状态或者游离态
(1)当通过get或load方法得到的po对象它们都处于persistent,但如果执行delete(po)时(但不能执行事务),该 po状态就处于detached, (表示和session脱离关联),因delete而变成游离态可以通过save或saveOrUpdate()变成持久态
(2)当把session关闭时,session缓存中的persistent的po对象也变成detached

Hibernate save和update区别

把这一对放在***位的原因是因为这一对是最常用的。
◆save的作用是把一个新的对象保存
◆update是把一个脱管状态的对象或自由态对象(一定要和一个记录对应)更新到数据库

Hibernate saveOrUpdate和update区别

这个是比较好理解的,顾名思义,saveOrUpdate基本上就是合成了save和update,而update只是update;引用Hibernate reference中的一段话来解释他们的使用场合和区别

通常下面的场景会使用update()或saveOrUpdate():
◆程序在***个session中加载对象,接着把session关闭
◆该对象被传递到表现层
◆对象发生了一些改动
◆该对象被返回到业务逻辑层最终到持久层
◆程序创建第二session调用第二个session的update()方法持久这些改动

Hibernate saveOrUpdate(po)做下面的事:
◆如果该po对象已经在本session中持久化了,在本session中执行saveOrUpdate不做任何事
◆如果savaOrUpdate(新po)与另一个与本session关联的po对象拥有相同的持久化标识(identifier),抛出一个异常
org.Hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [org.itfuture.www.po.Xtyhb#5]
◆saveOrUpdate如果对象没有持久化标识(identifier)属性,对其调用save() ,否则update() 这个对象

Hibernate save和persist区别

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

主要内容区别:
1,persist把一个瞬态的实例持久化,但是并"不保证"标识符(identifier主键对应的属性)被立刻填入到持久化实例中,标识符的填入可能被推迟到flush的时候。
2,save, 把一个瞬态的实例持久化标识符,及时的产生,它要返回标识符,所以它会立即执行Sql insert

【编辑推荐】

  1. iBATIS与Hibernate间的取舍
  2. JDBC与Hibernate读取性能分析
  3. 浅析NHibernate一对一映射的延迟加载
  4. 使用Hibernate 3二级缓存的四个经验
  5. MySQL存储过程中的Hibernate JDBC
责任编辑:佚名 来源: IT168
相关推荐

2009-09-24 16:53:47

Hibernate A

2009-09-27 09:46:45

Hibernate会话

2009-09-29 17:00:08

Hibernate c

2009-06-02 17:18:10

hibernate框架简介

2009-06-30 14:08:00

Hibernate缓存

2009-09-24 08:48:54

Hibernate技术

2009-09-21 17:33:50

Hibernate基础

2009-06-24 08:05:56

Hibernate基础Configurati

2009-06-26 16:19:32

Hibernate实现

2009-06-12 14:40:38

Hibernate AHibernate接口

2009-09-21 16:30:20

Hibernate S

2009-09-28 10:05:27

Hibernate基础

2009-09-28 10:24:58

Hibernate基础

2009-09-28 10:14:08

Hibernate基础

2009-09-22 09:27:29

Hibernate P

2009-09-22 14:23:37

Hibernate S

2009-09-21 14:24:08

Hibernate3.

2009-09-23 11:07:11

Hibernate基础

2012-02-08 12:17:38

HibernateJava

2009-09-28 10:39:01

Hibernate基础
点赞
收藏

51CTO技术栈公众号