首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
來個offer
2019-07-24 17:51
已编辑
湖南工业大学 Java
关注
已关注
取消关注
hibernate的常用session方法
前边我们讲过了Hibernate中Session的意义和如何使用Session的缓存,即Session是Hibernate提供的操作数据库的最主要的接口,这个Session当中提供了一系列查询、更新、删除、加载Java对象从而操作数据库的方法。Session最显著的特点是Session接口的实现类当中拥有一系列的Java集合,这些Java集合构成了Session缓存。Session缓存的作用是降低了访问数据库的频率。只要Session缓存实体未结束生命周期且Session没有清理缓存,那么存放在集合缓存中的对象也不会结束生命周期,即使没有任何的变量来引用它。Session还有三个操作缓存的方法。flush()主要是强制性的将数据库中的记录与Session中的缓存匹配,从而发送一条update语句。refresh()方法主要是强制性的将Session缓存中的对象和数据库的记录保持一致,从而发送一条select语句。clear()是指清除Session中的缓存,即清除Session中的Java对象。
今天我们来讲一讲Session中的操作Java对象从而操作数据库的核心方法。
1. Java对象的四种状态
我们站在持久化的角度上,Hibernate将Java对象分成了四种状态:临时状态,持久化状态,删除状态,游离状态。
① 临时状态
没有OID,没有在Session缓存中,数据库中没有与之对应的记录
--公司中未入职的员工
② 持久化状态
有OID,处于Session中,在数据库中有与之对应的记录
--公司在职的员工
③ 游离状态
有OID,不再存在于Session缓存中,因为它是由持久化对象转换而来所以在数据库中存在与之对应的一条记录
--公司请假的员工
④ 删除状态
不再存在于Session缓存中,在数据库中不再存在与其OID对应的记录-
-公司辞职的员工
2.Sessionh中的核心方法
Session中的方法可以通过操作这些Java对象从而操作数据库而使这些Java对象的状态发生变化。
① save方法
这个方法表示将一个对象保存到数据库中,
可以将一个不含OID的new出来的临时对象转换为一个处于Session缓存中具有OID的持久化对象。
需要注意的是:在save方法前设置OID是无效的但是也不会报错,在save方法之后设置OID程序会抛出异常,因为持久化之后的对象的OID是不可更改的,因为对象的OID此时和数据库中的一条记录对应。
② persist方法
这个方法基本个save方法差不多,唯一的区别是,在这个方法之前也不可以设置对象的OID,否则不会执行插入操作,而是会抛出异常。
③ get/load方法
这个方法是从数据库中获取一个对象到Session缓存中,load方法也是这个功能。二者有着明显的区别是:
一是若数据库中有和传入OID相对性的数据时,
get方法是立即加载并且发送sql语句来从数据库中获取对象,而load对象时采用一种延迟加载的方式来获取,即只有当需要使用这个对象的时候才会发送SQL语句。
二是若数据库中没有和传入OID相对性的数据时,get方法返回null值,load方法会抛出一个对象未找到的异常
三是若在使用返回对象的属性前将session进行了关闭,那么load方法会抛出一个lazyInitialedException--懒加载异常。这是因为load方法返回一个代理对象,当我想向这个代理对象中填充属性时,因为session已经关闭,那么久无法加载从而抛出懒加载异常。
④ update方法
这个方法顾名思义就是更新一个对象在数据库中的对照情况,从而使一个游离对象转换为一个持久化对象。
若是更新一个持久化对象,不需要再显式子的进行update方法,因为在commit方法中已经进行过flush了。
若是关闭了一个session,而又打开了一个session,这时,前一个session对象相对于第二个session来说就是游离的对象了,此时,必选显式的用第二个session进行update一下才可以将这个对象变成相对于第二个session的持久化对象。需要注意的是,此时在更新游离对象时无论Java对象中的内容和数据库中记录是否一样都会发送update语句,若是在数据库中将update语句和某个触发器绑定在了一起,那么就会造成触发器的错误触发。而我们在更新持久化对象时Hibernate会验证一下,若是Java对象和数据库中对应的记录一致的话就不会发送update语句。那么我们怎么避免这种在更新游离对象时多发update语句的情况呢?可以在hbm.xml文件的class节点设置一个属性叫做select-before-update为true,就可以避免了。通常我们不需要设置这个属性,除非多发送update语句触发触发器二者相关联使用。
若表中没有与Java对象对应的记录,则会抛出异常
当update关联一个游离对象时,若session中已经存在一个相同OID的持久化对象,那么会抛出异常,注意:同一个session中不可以存在两个相同OID的对象。
⑤ saveOrUpdate方法
这个方法同时包含了前边save和update的功能。当对象时临时的,那么执行save方法,当对象时游离的,那么执行update方法。
⑥ delete方法
顾名思义,这个方法就是来删除游离的或者持久化的对象及其在数据库中对应的记录。
⑦ evict方法
这个方法就是将持久化对象从session缓存中删除,使其成为一个游离的对象。
原文:https://blog.csdn.net/qq792020962/article/details/76669151?utm_source=copy
提示
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
不愿透露姓名的神秘牛友
07-07 12:40
偷听到HR谈话,这5类简历直接丢垃圾桶!
上周在科技园咖啡厅,意外听到两位HR的劲爆对话。赶紧分享一下。🚩 1. “精通党”简历(挂得最快!)HR原话:“写‘精通Spring/MySQL/Redis’的,99%是吹牛,直接pass!”真相:- 大厂面试官会 当场拷打:“Redis的RDB和AOF混合持久化怎么配置?Spring事务传播机制有几种?”- 正确写法:✅ “熟悉Spring Boot,了解IoC/AOP原理”(诚实!)✅ “掌握MySQL索引优化,有慢查询调优经验”(具体!)🚩 2. “学生会主席/社团团长”简历(HR翻白眼)HR吐槽:“校园经历写一页纸?我们招程序员不是招班长!”真相:- 除非 技术相关经历(如:ACM...
点赞
评论
收藏
分享
不愿透露姓名的神秘牛友
昨天 15:08
实习没到一个月,赔了公司700多😄
实习没到一个月,就把一杯免费的咖啡洒在了电脑上,要是普通电脑就好了,但是是macbookpro😭赔了700多😅😅😅
实习生的蛐蛐区
点赞
评论
收藏
分享
06-20 17:09
腾讯音乐娱乐集团_算法实习生(实习员工)
秋招第一个offer,拿下~
普联提前批,不过薪资感觉刚刚到及格线,不是非常满意~
牛客37592471...:
tp学历厂,只能说你学历到位了
Tplink求职进展汇总
点赞
评论
收藏
分享
06-24 17:38
已编辑
哈尔滨工业大学 产品经理
26硕找实习找了三个月,至今0offer
我愿称为实习悖论➡️大公司实习经历不够➡️小公司说我稳定性差(实习时长我只能3个月,还要回尔滨秋招)求大佬帮看看简历🙏求推荐的岗位🙏工资一点要求都没有,自费实习我都愿意全国可飞,租房子实习
vicky_023:
先说能干六个月进去了再润呗 太老实啦
0offer是寒冬太冷还...
点赞
评论
收藏
分享
07-09 14:14
门头沟学院 前端工程师
26秋招提前批
主包是26毕业生,本来躺在床上美美打开抖音打算开始享受自己的暑假结果看见26秋招提前批已经开始了手贱一搜看到大家已经26考公复习第二轮考公秋招两手抓提前批投递10+公司了我的建议是以后大学也不用读了,高考完就开始秋招了,暑期实习转正一步到位,实在不行就开始幼儿园入学提前批,从小开始培养,成为真正的管培生
地平线_官方内推:
是的,千军万马开始过独木桥了。我们今天秋招开始了
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
四段实习终大厂 如此牺牲为哪般
2.6W
2
...
双非二本靠一张嘴拿下美团
1.3W
3
...
小红书二面(第二天oc)
7231
4
...
突然对上流社会祛魅了
6756
5
...
儿时记忆在梦中闪回,一觉醒来继续做“大人”
4024
6
...
大疆测评流程分享
3615
7
...
秋招这就要开始了吗
3117
8
...
OMG,超雄hr
2675
9
...
我的leader一直问我有没有对象
2592
10
...
死喽,面试前因为网名被HR制裁咯
2522
创作者周榜
更多
正在热议
更多
#
你认为小厂实习有用吗?
#
14247次浏览
187人参与
#
面试官是我前女友
#
107130次浏览
731人参与
#
实习生的蛐蛐区
#
40998次浏览
329人参与
#
当你面对裁员会如何?
#
276069次浏览
2438人参与
#
计算机有哪些岗位值得去?
#
13206次浏览
134人参与
#
lastday知无不言
#
57009次浏览
460人参与
#
在职场上,你最讨厌什么样的同事
#
14600次浏览
150人参与
#
推荐一首陪你工作的歌吧
#
14096次浏览
97人参与
#
说说你知道的学历厂
#
28784次浏览
178人参与
#
你找工作的时候用AI吗?
#
15177次浏览
194人参与
#
下班后的时间你怎么安排
#
7755次浏览
113人参与
#
哪一瞬间觉得自己长大了
#
7426次浏览
167人参与
#
携程求职进展汇总
#
559554次浏览
4258人参与
#
面试尴尬现场
#
24339次浏览
164人参与
#
工作后会跟朋友渐行渐远吗
#
30116次浏览
216人参与
#
中核求职进展汇总
#
20218次浏览
152人参与
#
社会教会你的第一课
#
29818次浏览
397人参与
#
多益网络工作体验
#
49739次浏览
280人参与
#
虾皮求职进展汇总
#
244295次浏览
1797人参与
#
神州信息工作体验
#
16120次浏览
75人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务