Hibernate4之session核心方法

在学习session的核心方法之前,我们先了解下hibernate中几种对象的状态:

暂时状态:这样的状态就好像咱们公司请的暂时员工一样,他在公司里没有相关的资料和id。

特点:在使用代理主键的情况下, OID 通常为 null

不处于 Session 的缓存中

在数据库中没有相应的记录

持久化状态:我们能够理解成我们公司的正式在岗职工。

特点:OID 不为 null

位于 Session 缓存中

若在数据库中已经有和其相应的记录, 持久化对象和数据库中的相关记录相应

Session 在 flush 缓存时, 会依据持久化对象的属性变化, 来同步更新数据库

在同一个 Session 实例的缓存中, 数据库表中的每条记录仅仅相应唯一的持久化对象

游离状态:这样的就类似我们公司在职休假的员工,有其相关的在岗资料。

特点:OID 不为 null

不再处于 Session 缓存中

普通情况需下, 游离对象是由持久化对象转变过来的, 因此在数据库中可能还存在与它相应的记录

删除状态:这样的就类似我们的已经离职的员工

特点:在数据库中没有和其 OID 相应的记录

不再处于 Session 缓存中

普通情况下, 应用程序不该再使用被删除的对象

session的save方法

save方法能够使一个暂时对象转化为一个持久对象。

1、把要save的对象增加到session中。使它进入持久化状态

2、选用映射文件指定的标识符生成器, 为持久化对象分配唯一的 OID. 在 使用代理主键的情况下, setId() 方法为 News 对象设置 OID 使无效的.

3、计划运行一条 insert 语句:在 flush 缓存的时候

4、Hibernate 通过持久化对象的 OID 来维持它和数据库相关记录的相应关系. 当 News 对象处于持久化状态时, 不同意程序任意改动它的 ID

5、persist() 和 save() 差别:

当对一个 OID 不为 Null 的对象运行 save() 方法时, 会把该对象以一个新的 oid 保存到数据库中;  但运行 persist() 方法时会抛出一个异常.

session的get方法和load方法

同样点:都能够依据跟定的 OID 从数据库中载入一个持久化对象

不同点:

当数据库中不存在与 OID 相应的记录时, load() 方法抛出 ObjectNotFoundException 异常, 而 get() 方法返回 null

两者採用不同的延迟检索策略:load 方法支持延迟载入策略。

而 get 不支持。

session的update方法

1、Session 的 update() 方法使一个游离对象转变为持久化对象, 而且计划运行一条 update 语句.

2、若希望 Session 仅当改动了 News 对象的属性时, 才运行 update() 语句, 能够把映射文件里 <class> 元素的 select-before-update 设为 true. 该属性的默认值为 false

3、当 update() 方法关联一个游离对象时, 假设在 Session 的缓存中已经存在同样 OID 的持久化对象, 会抛出异常

4、当 update() 方法关联一个游离对象时, 假设在数据库中不存在对应的记录, 也会抛出异常.

session的saveOrUpdate方法

1、Session 的 saveOrUpdate() 方法同一时候包括了 save() 与 update() 方法的功能

2、该方法使用的情况:

判定对象为暂时对象的标准

Java 对象的 OID 为 null

映射文件里为 <id> 设置了 unsaved-value  属性, 而且 Java 对象的 OID 取值与这个 unsaved-value 属性值匹配

session的delete方法

1、Session 的 delete() 方法既能够删除一个游离对象, 也能够删除一个持久化对象

2、Session 的 delete() 方法处理过程

计划运行一条 delete 语句

把对象从 Session 缓存中删除, 该对象进入删除状态.

3、Hibernate 的 cfg.xml 配置文件里有一个 hibernate.use_identifier_rollback 属性, 其默认值为 false, 若把它设为 true, 将改变 delete() 方法的执行行为: delete() 方法会把持久化对象或游离对象的 OID 设置为 null, 使它们变为暂时对象

时间: 2024-08-29 21:29:22

Hibernate4之session核心方法的相关文章

[原创]java WEB学习笔记79:Hibernate学习之路--- 四种对象的状态,session核心方法:save()方法,persist()方法,get() 和 load() 方法,update()方法,saveOrUpdate() 方法,merge() 方法,delete() 方法,evict(),hibernate 调用存储过程,hibernate 与 触发器协同工作

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

hibernate的session对象核心方法注意的问题

1.session.save()方法 1).session.save()方法会使一个对象从临时状态转变为持久化状态. 2).session.save()方法会赋予持久化对象的OID属性一个ID值,以对应数据库该条数据. 3).在session.flush()被调用时,session.save()方法会发送一条insert SQL语句. 4).持久化对象的OID值不能被修改,尝试修改会抛出异常. 2.session.persist()方法 1).session.persist()和save()方法

Hibernate4获得Session

在Hibernate3中获取Session的方法: Session session = this.getSession(): 前提是类要继承HibernateDaoSupport: public class XXX extends HibernateDaoSupport 在Hibernate4中,仍然需要继承HibernateDaoSupport,但是不能再this.getSession()了,只能通过SessionFacotry获得Session.首先要获得SessionFactory: @R

SSH框架之Struts(3)——Struts的执行流程之核心方法

上篇讲了Tomcat实例化一个单例的ActionServlet.依据web.xml配置文件做好对应的初始化工作. 这时client产生一个.do结尾的request请求,採用get/post方式提交之后.不论哪种方式提交,都会进入到process核心方法中. ActionServelt doGet()和doPost()方法 public void <strong>doGet</strong>(HttpServletRequest request, HttpServletRespon

清空session的方法

清空session的方法,常用来注销的时候清空所有的session. 方法一: Enumeration e=session.getAttributeNames(); while(e.hasMoreElements()){ String sessionName=(String)e.nextElement(); System.out.println("存在的session有:"+sessionName); session.removeAttribute(sessionName); } 方法

VS2012中使用CEGUI项目发布到XP平台的问题(核心方法就一句话。“你项目使用的所有外部依赖库都用/MT编译。”)

接着上一篇文章,详细说说如何把一个带CEGUI的项目发布到XP平台. 这个问题纠缠了我好几天.这里把详细解决思路记下来.有同样问题的朋友可以少走很多弯路. 核心方法就一句话.“你项目使用的所有外部依赖库都用/MT编译.” 1.准备. 首先你要具备如下工具:CEGUI源码:FreeType源码:Pcre源码:CMake工具.我会在下文说明原因. 各个开源库的版本号,请参考你的CEGUI引用的各自的头文件分别下载. FreeType开源库主页:http://sourceforge.net/proje

jQuery编程中的一些核心方法简介

调用 jQuery 对象的方法很简单: $('h1').remove(); 大多数 jQuery 方法都是像上面这样被调用的,这些方法都位于 $.fn 命名空间内,这些方法称为 jQuery 对象方法. 但是也有一些方法不需要依赖于选择器的结果集,这些方法位于 jQuery 命名空间内,这些方法称为 jQuery 核心方法.如果觉得不好理解,记住下面两条即可: 所有 jQuery 选择器的方法都位于 $.fn 命名空间内. $ 内的方法一般都是一些实用的功能性方法,这些方法不依赖选择器,这些方法

第二节 hibernate session基本方法介绍

Hibernate session 对象是和数据库建立连接的对象,session中包含了许多操作数据库的方法,下面一一描述. 1 保存对象到数据库 session.save(); 按照第一节的配置,主键的生成策略为native(数据库自动生成主键),由于数据库使用的是mysql 5,所以是自增的主键生成方式.保存对象时并不需要设置id属性. @Test public void testSave() { try { User user = new User(); user.setBirthday(

【翻译自mos文章】找到持有library cache lock session的方法

找到持有library cache lock session的方法 参考自: How to Find which Session is Holding a Particular Library Cache Lock (文档 ID 122793.1) 其实就是两种方法: 一.Systemstate Analysis 此处不做翻译,原文转载 Systemstate event will create a tracefile containing detailed information on eve