首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
提示
全部评论
推荐
最新
楼层
还没有回复哦~
相关推荐
11-16 22:03
长春理工大学 网页产品经理
秋招至今,我竟然连一个offer都没有!
我投了27份简历,经历了12次测评和笔试,11次一面和群面,6次二面,2次三面,结果大概率都是“养鱼”。唯一的offer我还拒了,真是自作自受。每次被挂都让我心情暴怒,我真的不知道现在该怎么办了。
怎么起名字:
给你面试了说明你的简历学历没问题
牛客创作赏金赛
点赞
评论
收藏
分享
11-16 13:40
唐山学院 数据挖掘
阿里真实体验
首先,工作模式上,阿里是那种自上而下的,运营主导,策略迭代慢,PPT满天飞。再说福利待遇,阿里每天有50块的餐补,食堂选择多,吃得不错,每月还有800块的打车费,出差机会少。信息获取方面,信息最小化,申请数据和文档权限得等上好几天。工作时长上,阿里算是比较注重工作生活平衡,中午有两个小时的午休,可以逛逛园区。
阿里巴巴公司氛围 316人发布
点赞
评论
收藏
分享
10-06 12:46
门头沟学院 Java
我了个hr集体复活
跨考小白:
定时任务启动
点赞
评论
收藏
分享
11-01 19:18
蚌埠坦克学院 智能驾驶系统工程师
不是哥们
这面试时间是认真的吗😰
Natrium_:
这时间我以为飞机票
点赞
评论
收藏
分享
11-20 10:52
牛客运营
中国烟草薪资待遇,这给的太多了吧?!
烟草的薪资架构:基本工资+绩效工资+年终奖+奖金+节日福利据调查显示,高待遇岗位、沿海的部分烟厂到手月薪1w+,年薪15w+,甚至年薪达到20w+的岗位也不在少数。还有六险二金、单身宿舍、住房补贴、电话补贴、定期体检、购物卡、过节费等。*不过不同地区福利待遇会有所不同哦。如此福利满满的中国烟草,我们该怎么做好求职准备呢?1/ 报名:烟草一般都会将招考信息发布在官网,信息中有详细的招聘时间、报考渠道、考试内容等信息。2/ 笔试:中国烟草的笔试和公务员考试相似,包含行测、申论、公基等,不同地区的笔试考察侧重点不同,比如部分地区会要求《烟草专业知识》等。3/ 面试:烟草面试分为结...
国央企薪资爆料
点赞
评论
收藏
分享
点赞成功,聊一聊 >
点赞
收藏
评论
分享
回复帖子
提到的真题
返回内容
全站热榜
1
...
成都 Java 社招面经(5年经验)
1.3W
2
...
我与阿里
1.0W
3
...
牛客创作赏金赛:首发动态,100%拿现金!
8524
4
...
秋招是时候收官了
6635
5
...
收到offer了!!!!
5274
6
...
秋招颗粒无收,我要何去何从
4982
7
...
26日常实习小红书面经
4784
8
...
我的秋招结束了,五年前的我会想到这一切吗
4722
9
...
发达喽,牛客居然请来了TA为我颁奖!遥遥领先!
4674
10
...
11.9 同程一面(JAVA、逆向 -北京)
3880
正在热议
#
晒一晒我的offer
#
9704846次浏览
104821人参与
#
机械只有读研才有出路吗?
#
7901次浏览
103人参与
#
北方华创开奖
#
21032次浏览
244人参与
#
地方国企笔面经互助
#
1908次浏览
6人参与
#
滴滴求职进展汇总
#
78766次浏览
688人参与
#
考研失败就一定是坏事吗?
#
36266次浏览
355人参与
#
机械人,签完三方你在忙什么?
#
22965次浏览
119人参与
#
总结:哪家公司面试体验感最差
#
23450次浏览
115人参与
#
机械应届生薪资要多少才合适?
#
11753次浏览
55人参与
#
学历or实习经历,哪个更重要
#
39053次浏览
280人参与
#
选完offer后,你后悔学本专业吗
#
6556次浏览
43人参与
#
查收我的offer竞争力报告
#
13300次浏览
191人参与
#
机械人怎么评价今年的比亚迪
#
40872次浏览
141人参与
#
应届生被毁约被毁意向了怎么办
#
24055次浏览
230人参与
#
00后45度躺现状
#
33485次浏览
294人参与
#
没有合适的工作,你会先找个干着,还是考公考研
#
35301次浏览
392人参与
#
秋招OC许愿
#
224022次浏览
1854人参与
#
如果能重来,就业or读研你选哪个?
#
45262次浏览
333人参与
#
大疆求职进展汇总
#
402634次浏览
2869人参与
#
实习,投递多份简历没人回复怎么办
#
2381538次浏览
34165人参与
#
双非能在秋招上岸吗?
#
98953次浏览
768人参与
牛客网
牛客企业服务