首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
提示
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
昨天 11:55
湖北工业大学 C++
27届纯摆烂还能找到中厂暑期实习吗
鼠鼠bg湖北双飞本中流2硕,但从本科就很摆烂,硕士一年半光打游戏了论文也没发出来,工作技能也没咋学以前用过c++和qt今年年初转的Java,但过年放假了20天也是摆烂过日子一点没学,现在刚写完黑马点评,力扣没刷,juc jvm sql高级什么的也都没看,请问下各位我现在就包装下黑马点评然后投简历练手,还是继续沉淀到四月初只想能够刷一个中厂的java后端实习就行了。另外就是最近几天翻了下最近大厂的暑期实习,怎么感觉java后端好少,全是ai相关的,是不是应该再做一个ai相关的项目
没有实习经历,还有机会进...
点赞
评论
收藏
分享
03-09 15:32
广州商学院 Java
快手Java二面
做自我介绍;挑一个做过的挑战大的项目,说明有哪些可复用的经验;项目中MQ主要用来做什么;MQ消息丢失了该怎么处理;MQ消息发送/消费失败该怎么处理;死信队列的原理是什么,消息怎么进入死信队列,是失败一次就进入吗;项目中是否用到MySQL索引;MySQL索引在什么情况下不生效;MySQL模糊匹配like查询时,索引是否生效,百分号在中间时索引是否生效;开发过程中如何使用线程池;线程池的核心线程和最大线程设置为多少,设置依据是什么;如何确保多线程并发情况下的线程安全;除了ThreadLocal,还有哪些保证线程安全的方式,实际用过哪些;现场做二叉树序列化与反序列化的算法题;实习大概能实习多久,最少...
查看18道真题和解析
点赞
评论
收藏
分享
03-03 17:40
湘潭大学兴湘学院 生物制药岗
26届本科制药工程
我要找工作我求求了
点赞
评论
收藏
分享
02-26 01:38
五邑大学 Java
26届春招 求大佬指导
😭我这个简历能在春招找到个中厂吗,想找个200人以上的,目前鼠鼠在30人的一个创业公司干后端,整个公司就我一个后端,没人带,想找个大一点的公司我这里还有个中国铁塔的实习,不知道写不写比较好,如果要包装的话,各位大佬有建议吗?求求求,鼠鼠年后一周就打算开始投了,各位大佬帮帮看看还有哪里能改的😭😭😭
酷碧:
我这里项目都是真实的,最近的那个项目是我一个人从0到1做起来的,不知道有没有竞争力,但是鼠鼠八股算法啥的没怎么准备,这两周打算上班的时候抽空疯狂看八股
点赞
评论
收藏
分享
03-12 08:59
门头沟学院 Java
金三银四的真相
刷到这个话题,看到牛友们都在聊「有没有感受到金三银四」,有人说机会扎堆,有人说静悄悄,我想结合自己的真实投递经历,跟大家聊聊今年金三银四最真实的样子,以及我看到的旺季真相。一、我期待的金三银四,vs 现实里的金三银四二月底的时候,我对今年的金三银四充满了期待。身边的学长学姐跟我说,三月是春招最旺的时候,大量企业补录开HC,机会比秋招还多,只要好好投,肯定能上岸。我熬了三个通宵,把简历改了8版,整理了春招岗位表,把互联网大厂、国企、银行、中小厂的岗位分好类,定了计划:每天投20份简历,上午刷新岗位投递,下午刷算法背八股,晚上复盘面试。三月一号,我准时开启了疯狂投递模式,第一天就投了30份简历,想...
你感受到金三银四了嘛?
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
快手Java后端一面
6378
2
...
滴滴一面面经
4316
3
...
腾讯暑期一面
4260
4
...
6个AI实操技巧,帮你在简历+面试中拉开差距
3888
5
...
美团产品笔试何意为....
3171
6
...
字节一面、二面(横向挂)
3069
7
...
2026年03月02日 11点28分腾讯ieg春招技术面二面
2279
8
...
第二阶段的总结
2256
9
...
米哈游笔试
2208
10
...
3.13 JDY 京东健康后端开发实习一面面经
2202
创作者周榜
更多
正在热议
更多
#
你感受到金三银四了嘛?
#
72922次浏览
616人参与
#
2025秋招体验点评
#
99729次浏览
753人参与
#
虽然0面试,但今天___,夸夸自己
#
9185次浏览
174人参与
#
你上一次加班是什么时候?
#
137238次浏览
756人参与
#
春招 / 实习投递,你最焦虑的一件事
#
54203次浏览
1041人参与
#
美团笔试
#
697941次浏览
4632人参与
#
AI岗位暴涨12倍,你会转AI赛道吗?
#
5079次浏览
94人参与
#
米哈游笔试
#
553174次浏览
1088人参与
#
今天你投了哪些公司?
#
151382次浏览
2706人参与
#
金三银四,你的春招进行到哪个阶段了?
#
18676次浏览
254人参与
#
vivo笔试
#
13077次浏览
122人参与
#
27届实习投递记录
#
924次浏览
23人参与
#
文科生还参加今年的春招吗
#
13746次浏览
100人参与
#
腾讯音乐求职进展汇总
#
157713次浏览
1070人参与
#
AMA
#
17670次浏览
58人参与
#
AI项目实战
#
6775次浏览
323人参与
#
小米编程考试
#
31742次浏览
151人参与
#
字节7000实习来了,你投了吗?
#
4473次浏览
20人参与
#
刚工作的你,踩过哪些坑?
#
6316次浏览
137人参与
#
秋招报数:你投了多少家公司?
#
156944次浏览
957人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务