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

Hibernate有许多值得学习的当地,这儿咱们首要介绍Hibernate save,包含介绍Hibernate saveOrUpdate等方面。

Hibernate save根底简介(hibernate的save方法)  save 第1张

在所有之前,阐明一下,关于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. 浅析NHibernate1对1映射的推迟加载
  4. 运用Hibernate 3二级缓存的四个经历
  5. MySQL存储过程中的Hibernate JDBC
转载请说明出处
知优网 » Hibernate save根底简介(hibernate的save方法)

发表评论

您需要后才能发表评论