首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
提示
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
昨天 15:03
武汉大学 Java
20251202【滴滴】面试算法真题(共1题)
点赞
评论
收藏
分享
今天 19:05
春招还是得尝试捡漏的
虽然秋招有了offer保底,但是根据往届师姐们的经验,对于职能岗来说,春招还是有挺大机会捡漏的机会。有很多国企都会在春招进行招聘,不仅流程比较长,而且时间比较晚,uu们还是有机会的。
2025年终总结
点赞
评论
收藏
分享
10-17 16:36
洛阳理工学院 测试开发
面试被爽约了😭😭😭
鼠鼠只能接着投了😰😰
迷茫的大四🐶:
价格这么低都能满了?
点赞
评论
收藏
分享
11-24 18:35
中南大学 Java
因食堂太贵而劝退互联网!
公司开的新食堂,看一眼就吓哭了,坐5分钟就跑路了服务员还追出来问我为什么走了。还敢来互联网吗?啊?黑子说话!
能和我打一辈子代码吗:
这菜是金子做的
当下环境,你会继续卷互联...
点赞
评论
收藏
分享
昨天 11:59
搜狐畅游_游戏策划工程师(准入职员工)
安克创新内推,安克创新内推
工作真实感受【Work in Anker】 🌟入职流程:非常顺畅,会有HR专门为你办理入职手续,然后会有你的mentor,leader,hrbp或者其他同事引导你去领取工作资产(Windows和Mac系统都有)并且带你去工位。我的mentor第一天就请我喝了咖啡吃了饭~开心🥳 🎁入职礼物:入职礼物有anker的马克杯,帆布袋,校招生还有安克的充电宝(图4)!安克的充电宝原来真的这么小一只,怪不得叫口红充电宝,而且CMF做的深得我心,颜色都好好看哇! 💻办公系统:像字节,蔚来,小米等公司一样,anker同样使用飞书办公系统,用过飞书的都知道哈,飞书非常高效,用户友好,有了飞书办公效率杠杠...
安克创新 Anker公司福利 767人发布
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
后端秋招24场100%胜率的SSP,真的只是靠卷技术吗?
2.2W
2
...
面试官别再问 AI 应用啦,我是真没招了
7526
华为开奖交流
热聊中
3
...
本科秋招7SSP之旅
4472
4
...
下班就想躺,这正常吗
3797
5
...
关于毁约的注意事项
3763
6
...
社招总结【Java后端拿下四家电商Offer回报牛客网友】
2884
7
...
怎么劝女朋友找工作?
2750
8
...
可惜我才大三。。。
2429
9
...
27纯血双非第二段大厂实习oc
2417
10
...
想要去北京实习但家人不支持
2276
创作者周榜
更多
正在热议
更多
#
为了去实习,我赌上了___
#
13971次浏览
157人参与
#
晒一晒你收到的礼盒
#
87376次浏览
426人参与
#
uu们,春招你还来吗?
#
6575次浏览
57人参与
#
2025年终总结
#
6596次浏览
132人参与
#
十二月请对我好一点
#
19279次浏览
281人参与
#
降低公积金和取消房补怎么选
#
22747次浏览
73人参与
#
父母对你找工作是助力还是阻力?
#
9623次浏览
172人参与
#
实习打杂,要跑路吗
#
50398次浏览
320人参与
#
第一份工作能做外包吗?
#
84614次浏览
567人参与
#
电信求职进展汇总
#
31001次浏览
166人参与
#
学历or实习经历,哪个更重要
#
200736次浏览
1059人参与
#
哪一瞬间让你觉得“这班不如不上”
#
7157次浏览
114人参与
#
一人推荐一个值得做的项目
#
6549次浏览
101人参与
#
高薪高压 vs 低薪wlb,你怎么选?
#
7409次浏览
88人参与
#
工作前VS工作后,你的心态变化
#
9637次浏览
132人参与
#
找工作时的取与舍
#
110120次浏览
828人参与
#
工作中出现了XX情况正常吗
#
24377次浏览
192人参与
#
市场营销人求职交流聚集地
#
162573次浏览
1212人参与
#
公司福利里最没用的一项是啥
#
4940次浏览
83人参与
#
回顾今年你干过的最“勇”的一件事
#
10035次浏览
138人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务