首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
提示
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
02-12 12:26
网易游戏_游戏研发工程师(准入职员工)
网易互娱内推,网易互娱内推码
网易**不管问你啥,记住一个话术原则小小的提醒下各位留子:**时不要直来直去有啥说啥;千万得多思考别说太满给自己留个思考或回旋的余地・1、被问 “有没有接触过网易的产品”(哪怕了解不多)别直接说 “没有”(容易显得缺乏兴趣)试试:“之前用过网易云音乐和网易新闻,对产品的界面设计和功能逻辑有过留意。虽然没有深入研究,但能感受到网易产品注重用户体验的特点,入职后会系统学习相关产品知识”・2、被问 “能接受高强度的项目加班吗”别勉强说 “没问题”(后续可能难以承受)试试:“我理解互联网行业项目推进时需要集中精力,在关键节点愿意配合团队加班。但也会注重提升工作效率,合理规划时间,尽量在正常工作时间完成...
点赞
评论
收藏
分享
02-12 21:44
已编辑
门头沟学院 Java
校招无固定时间
以前我们总是听说金九银十,金三银四。但在秋招过后感觉根本不是这样,我身边大部分人秋招找到工作的都是在11~12月份(普通双非),这个时间点感觉只适合硬bg或多段大厂实习的佬。现在春招好多中大厂也开了,但是感觉投了就是炮灰,有无春招过的大佬说下什么时间点投春招比较好呢?#春招什么时候投?#
点赞
评论
收藏
分享
01-05 19:20
门头沟学院 Java
好招好散,再招不难
秋招这段时间,我前前后后投出去的简历加起来快有一百多家了,忙活这么久,也拿到了一些公司的offer。但其中有的offer实在不咋的,薪资给得太不给力了,比不上其他已经有Offer的待遇,思来想去,我还是准备拒了,要不然我自己留着也不能A薪资,这样也能把这些岗位机会释放出来,留给那些更需要的人其实拒绝的时候我心里还挺纠结的,毕竟之前在谈薪电话里,我都已经口头答应接受offer了,事后再反悔拒绝,总担心会让HR觉得不舒服,甚至影响到他们的招聘进度(我想多了,管好自己就行了)。没想到对接的HR特别大气,不仅没有半句责备,还跟我说“祝顺利”好招好散,再招不难,真心希望所有HR都能有这样的格局和胸襟,让求职和招聘都能多一份舒心和体面,拒了你就再招别人呗嘿嘿嘿
牛友故事会
点赞
评论
收藏
分享
02-10 21:54
已编辑
门头沟学院 Java
AI开发工程师都在干什么?
25年刚开年DeepSeek横空出世,集团下发红头文件,全面拥抱AI,楼主毅然从一个JavaBoy通过内部考试转成了AI开发工程师,到目前为止算是整整一年了。今天来聊一下所谓AI开发工程师都在干什么?首先我们内部有一个共识,现在看到的大部分的AI应用,在公司层面完全是探索阶段,就是说大部分的AI应用都是一个华丽的demo,根本没法保证用户的大量使用了。强如千问,该崩还是得崩。所以我今年一半的工作内容都是在调研新技术,调研新交互模式,开各种会,这个时候你就会感慨为什么乔布斯、张小龙他们是产品而不是研发,很多时候我们精心设计,经过用户调研、项目立项、产品原型设计、技术调研、评审等等等环节,设计出来...
推荐一个值得做的AI项目
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
面试官视角聊聊:如何通过Agent面试
3169
2
...
明天回家过年!
1811
3
...
27双非字节实习oc
1739
4
...
字节后端三面面经
1062
5
...
三月中才开始投实习,五月上岸大厂,我是怎么准备的
1056
6
...
春节放假最惨的还是实习生
810
7
...
决定接成方金科offer了
718
8
...
27字节agent开发实习一面
685
9
...
距离春招还有一个月,你是什么开局
580
10
...
360 AI应用一面面经
528
创作者周榜
更多
正在热议
更多
#
春招什么时候投?
#
10346次浏览
177人参与
#
牛友的春节生活
#
7454次浏览
156人参与
#
春节前,你还在投简历吗?
#
13906次浏览
163人参与
#
春节提前走,你用什么理由请假?
#
10221次浏览
245人参与
#
牛客AI体验站
#
14776次浏览
267人参与
#
从夯到拉,锐评职场mentor
#
4961次浏览
79人参与
#
实习到现在,你最困惑的一个问题
#
4449次浏览
127人参与
#
备战春招/暑实,现在应该做什么?
#
4889次浏览
152人参与
#
工作后,你落下了哪些病根
#
32348次浏览
277人参与
#
怎么给家人解释你的工作?
#
51552次浏览
208人参与
#
没有家庭托举的我是怎么找工作的
#
35696次浏览
266人参与
#
距离春招还有一个月,你现在是什么开局?
#
6846次浏览
113人参与
#
上班摸鱼,你都在干些什么?
#
39078次浏览
246人参与
#
聊聊Agent开发
#
24567次浏览
595人参与
#
暑期实习什么时候投?
#
7058次浏览
165人参与
#
今年秋招你收到了多少封邮件?
#
37518次浏览
277人参与
#
什么是优秀的实习经历
#
35924次浏览
387人参与
#
面试经验谈
#
406380次浏览
7217人参与
#
推荐一个值得做的AI项目
#
6736次浏览
180人参与
#
考研失败就一定是坏事吗?
#
221509次浏览
1539人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务