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, 使它们变为暂时对象
Hibernate4之session核心方法的更多相关文章
- [原创]java WEB学习笔记79:Hibernate学习之路--- 四种对象的状态,session核心方法:save()方法,persist()方法,get() 和 load() 方法,update()方法,saveOrUpdate() 方法,merge() 方法,delete() 方法,evict(),hibernate 调用存储过程,hibernate 与 触发器协同工作
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- hibernate4中使用Session doWork()方法进行jdbc操作(代码)
Hibernate3.3.2版本中getSession().connection()已被弃用,hibernate4中官方推荐使用Session doWork()方法进行jdbc操作 首先看看Work接 ...
- hibernate的session对象核心方法注意的问题
1.session.save()方法 1).session.save()方法会使一个对象从临时状态转变为持久化状态. 2).session.save()方法会赋予持久化对象的OID属性一个ID值,以对 ...
- Hibernate4获得Session
在Hibernate3中获取Session的方法: Session session = this.getSession(): 前提是类要继承HibernateDaoSupport: public cl ...
- SSH框架之Struts(3)——Struts的执行流程之核心方法
上篇讲了Tomcat实例化一个单例的ActionServlet.依据web.xml配置文件做好对应的初始化工作. 这时client产生一个.do结尾的request请求,採用get/post方式提交之 ...
- 基于redis的处理session的方法
一个基于redis的处理session的方法,如下. <?php class Session_custom { private $redis; // redis实例 private $prefi ...
- 【zepto学习笔记01】核心方法$()
前言 我们移动端基本使用zepto了,而我也从一个小白变成稍微靠谱一点的前端了,最近居然经常要改到zepto源码但是,我对zepto不太熟悉,其实前端水准还是不够,所以便私下偷偷学习下吧,别被发现了 ...
- zepto源码--核心方法(类数组相关)--学习笔记
从这篇起,在没有介绍到各类插件之前,后面将陆续介绍zepto对外暴露的核心方法.即$.fn={}里面的所有方法的介绍.会配合zepto的API进行介绍. 其实前面已经介绍了几个,如width,heig ...
- 如何使用数据库保存session的方法简介
使用数据库保存session的方法 php的session默认是以文件方式保存在服务器端,并且在客户端使用cookie保存变量,这就会出现一个问题,当一个用户由于某种安全原因关闭了浏览器的cookie ...
随机推荐
- 洛谷——P4109 [HEOI2015]定价
P4109 [HEOI2015]定价 模拟(有点儿贪心) 题目要求在区间$l,r$中$x$后导0尽量多,且除去后导0之外,最后一个数尽量是$5$才最优 从$l$到$r$依次考虑, 假设当前考虑到$50 ...
- Spoj8093 Sevenk Love Oimaster
题目描述 题解: 对于所有n串建广义后缀自动机. (广义后缀自动机唯一区别就是每次将las附成1,并不需要在插入时特判) 建完后再建出parent树,然后用dfs序+树状数组搞区间不同种类. 其实就是 ...
- pytest以函数形式的测试用例
from __future__ import print_function#pytest以函数形式形成测试用例def setup_module(module): print('\nsetup_modu ...
- POJ 1252 Euro Efficiency(最短路 完全背包)
题意: 给定6个硬币的币值, 问组成1~100这些数最少要几个硬币, 比如给定1 2 5 10 20 50, 组成40 可以是 20 + 20, 也可以是 50 -10, 最少硬币是2个. 分析: 这 ...
- 如何在ASP.NET MVC为Action定义筛选器
在ASP.NET MVC中,经常会用到[Required]等特性,在MVC中,同样可以为Action自定义筛选器,来描述控制器所遵守的规则. 首先,我们在ASP.NET MVC项目中定义一个TestC ...
- C# 禁止通过标题栏移动窗体
protected override void WndProc(ref Message m) { base.WndProc (ref m); if(m.Msg == 0x84) //不让拖动标题栏 { ...
- 关联及web_reg_save_param
一.什么是关联 关联(correlation):脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查 找,得到相应的值,已变量的形式替换录制时的静 ...
- Leetcode 301.删除无效的括号
删除无效的括号 删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果. 说明: 输入可能包含了除 ( 和 ) 以外的字符. 示例 1: 输入: "()())()" 输出 ...
- 66. No EntityManager with actual transaction available for current thread【从零开始学】
[从零开始学习Spirng Boot-常见异常汇总] 具体异常信息: org.springframework.dao.InvalidDataAccessApiUsageException: No En ...
- FZU1004-Number Triangle经典动归题,核心思路及代码优化
Problem 1004 Number Triangle Accept: 2230 Submit: 5895Time Limit: 1000 mSec Memory Limit : 327 ...