博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate4之session核心方法
阅读量:5810 次
发布时间:2019-06-18

本文共 1902 字,大约阅读时间需要 6 分钟。

在学习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, 使它们变为暂时对象

转载地址:http://frcbx.baihongyu.com/

你可能感兴趣的文章
re:Invent解读:没想到你是这样的AWS
查看>>
PyTips 0x02 - Python 中的函数式编程
查看>>
阿里云安全肖力:安全基础建设是企业数字化转型的基石 ...
查看>>
使用《Deep Image Prior》来做图像复原
查看>>
如何用纯 CSS 为母亲节创作一颗像素画风格的爱心
查看>>
Linux基础命令---rmdir
查看>>
优秀程序员共有的7种优秀编程习惯
查看>>
iOS sqlite3(数据库)
查看>>
粤出"飞龙",打造新制造广东样本
查看>>
编玩边学获数千万元A轮融资,投资方为君联资本
查看>>
蓝图(Blueprint)详解
查看>>
Spark之SQL解析(源码阅读十)
查看>>
Android图片添加水印图片并把图片保存到文件存储
查看>>
C#字符串的不变性
查看>>
前端路由简介以及vue-router实现原理
查看>>
比特币系统采用的公钥密码学方案和ECDSA签名算法介绍——第二部分:代码实现(C语言)...
查看>>
分享15款很实用的 Sass 和 Compass 工具
查看>>
AMD优势: 与众不同 选择丰富
查看>>
玩转高性能超猛防火墙nf-HiPAC
查看>>
简单按日期查询mysql某张表中的记录数
查看>>