Hibernate Session总结
现在我们可以在 IDEA 下新建一个 Hibernate 项目,接着上次内容这次主要总结一下 Hibernate 的 Session,及其核心方法。
Session
概述
- Session 接口是 Hibernate 向应用程序提供的操纵数据库的主要接口,提供了基本的保存、更新、删除和加载 java 对象的方法
- Session 具有一个缓存,位于缓存中的对象称为持久化对象,和数据库中的相关记录对应
- Hibernate 将对象分为 4 种状态,持久化状态,临时状态,游离状态,删除状态,Session 特定的方法可以使对象从一个状态到另一个状态。
Session 缓存
- Session 接口实现中包含一系列 java 集合,这些 java 集合构成了 Session 缓存,只要 Session 实例没有结束生命周期,且没有清理缓存,则存放在他缓存中的对象也不会结束生命周期
- Session 缓存可以减少 Hibernate 访问数据库的频率

操作 Session 缓存
- reflush(): 会强制发送sql查询(select)语句,使缓存中的数据和数据库中的数据保持一致,数据由数据库到缓存
- flush(): 会强制发送sql更新(update)语句,使数据库中的数据和缓存中的数据保持一致,数据由缓存到数据库

- 当程序执行 Transaction 的 commit() 方法时,该方法会先 flush(),然后再提交事务
持久化对象的状态
- 临时对象
- ID 通常为 null
- 不处于 Session 的缓存中
- 在数据库中没有对应的记录
- 持久化对象
- ID 不为 null
- 位于 Session 缓存中
- 持久化对象和数据库中相关记录对应
- Session 在 flush 缓存时,会根据持久化对象的属性变化,来同步更新数据库
- 同一个 Session 实例的缓存中,数据库表的每条记录对应唯一的持久化对象
- 删除对象
- 数据库中没有其 ID 对应的记录
- 不再处于 Session 缓存中
- 一般情况下应用程序不再使用该对象
- 游离对象
- ID 不为 null
- 不再处于 Session 缓存中
- 游离对象一般由持久化对象转换而来,因为数据库中可能会存在对应的对象
Session 方法
- save() & persist()
- save() 和 persist() 方法可以使得一个临时对象转变为持久化对象
- 执行 save() 和 persist() 方法将会在 flush 缓存的时候执行一条 insert 语句
- get() & load()
- 都是从根据 id 从数据库中加载一个持久化对象,当数据库中没有对应 id 的对象,get() 方法返回 null,load() 方法抛出一个异常
- load() 有延迟加载策略,即执行方法后返回一个代理对象,直到用到该对象的时候才会持久化,若关闭了 session,那么就会发生懒加载异常

- update()
- update() 方法使一个游离对象转变为持久化对象, 并且计划执行一条update 语句.
- 当 update() 方法关联一个游离对象时, 如果在 Session 的缓存中已经存在相同 OID 的持久化对象, 会抛出异常
- delete()
- delete() 方法既可以删除一个游离对象,也可以删除一个持久化对象
Hibernate Session总结的更多相关文章
- org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not a ...
- Use Spring transaction to simplify Hibernate session management
Spring对Hibernate有很好的支持 DataSource ->SessionFactory-> HibernateTranscationManagerHibernate中通 ...
- Could not open Hibernate Session for transaction;
javax.servlet.ServletException: org.springframework.transaction.CannotCreateTransactionException: Co ...
- Hibernate3回顾-5-简单介绍Hibernate session对数据的增删改查
5. Hibernate对数据的增删改查 5.1Hibernate加载数据 两种:get().load() 一. Session.get(Class arg0, Serializable arg1)方 ...
- [转]Hibernate Session各种状态转换方法分析
摘自http://spiritfrog.iteye.com/blog/221177 我的印象里, Hibernate session中常用的保存操作只有:save, update, saveOrUpd ...
- spring事务管理出错。No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy ...
- [原理][源代码解析]spring中@Transactional,Propagation.SUPPORTS,以及 Hibernate Session,以及jdbc Connection关系---转载
问题: 一. 1. Spring 如何处理propagation=Propagation.SUPPORTS? 2. Spring 何时生成HibernateSession ? 3. propagati ...
- No Hibernate Session bound to thread, and configuration does not allow creat
No Hibernate Session bound to thread, and configuration does not allow creat 今天遇到这么一个错误,在网上差了很多都没有能解 ...
- Hibernate Session 获取connection
Hibernate Session 获取connection 由于最近一个项目要用到一条辅助的SQL ,hibernate里面的SQLQuery API 总的SQL语句不能包含 : 冒号, 固放弃Hi ...
- hibernate.Session简介
★→→SessionFactory (org.hibernate.SessionFactory) 包含已经编译的映射(mappings),是制造session的工厂,可能含有一些可以在各个事务(tra ...
随机推荐
- H5学习之旅-H5的格式化(4)
H5的格式设置: b代表是粗体 i斜体 big 字体变大 small变小 em强调 strong 加强和变粗差不多 sub 定义下标字 sup 定义上标字 ins 插入字 del 删除字 代码实例 & ...
- Gradle实现的两种简单的多渠道打包方法
本来计划今天发Android的官方技术文档的翻译--<Gradle插件用户指南>的第五章的,不过由于昨天晚上没译完,还差几段落,所以只好推后了. 今天就说一下使用Gradle进行类似友盟这 ...
- 仿百度壁纸客户端(六)——完结篇之Gallery画廊实现壁纸预览已经项目细节优化
仿百度壁纸客户端(六)--完结篇之Gallery画廊实现壁纸预览已经项目细节优化 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Fragment 仿百度 ...
- 使用GDB命令行调试器调试C/C++程序
原文:http://xmodulo.com/gdb-command-line-debugger.html作者: Adrien Brochard 没有调试器的情况下编写程序时最糟糕的状况是什么?编译时跪 ...
- Linux的常用命令(2) - 关机
关机命令 shutdown‑h now 立即进行关机 shutdown‑r now 现在重新启动计算机 -t sec : -t后面加秒数,即"过几秒后关机" -k : 不 ...
- 内核调试工具 — kdump & crash
kdump简介 kdump是系统崩溃的时候,用来转储运行内存的一个工具. 系统一旦崩溃,内核就没法正常工作了,这个时候将由kdump提供一个用于捕获当前运行信息的内核, 该内核会将此时内存中的所有运行 ...
- 新版MATERIAL DESIGN 官方动效指南(一)
Google 刚发布了新版Material Design 官方动效指南,全文包括三个部分:为什么说动效很重要?如何制作优秀的Material Design动效及转场动画,动效的意义.新鲜热辣收好不谢! ...
- Android实训案例(三)——实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果!
Android实训案例(三)--实现时间轴效果的ListView,加入本地存储,实现恋爱日记的效果! 感叹离春节将至,也同时感叹时间不等人,一年又一年,可是我依然是android道路上的小菜鸟,这篇讲 ...
- SDWebimage的原理和使用机制
对于ASIHttp请求和AFNetworking请求都有关于图片缓存机制的使用,但是相对于专注运用在图片使用的SDWebimage来说,又有不一样的使用效果,最主要的体现在缓存数据的转换. SDWeb ...
- obj-c编程01:第一个类和对象的范例
这是obj-c学习过程中的第一篇博文,接下来还会有未知的N篇内容(关键是不知道obj-c有多难搞啊!),而且在以后不断的学习中,还会不断的在以前写的博文中修改和添加新的内容.在遇到暂时无法解决的问题时 ...