java之hibernate之session中对象的生命周期
1. session是用来执行对象的crud操作,并且session是对象事务工厂。session是线程级别的,所以生命周期比较短。
2.session中对象的生命周期图:
3.session中对象的状态
瞬时状态
持久状态
游离状态
4.对象的生命周期一:
new---->瞬时状态----->save------>持久状态----->close----->游离状态
- public class HibernateTest {
- @Test
- public void testSession1(){
- Session session = null;
- Transaction tx = null;
- User user=null;
- try {
- //user处于瞬时状态,session没有管理该对象
- user = new User();
- user.setName("小菜");
- user.setAge(40);
- session = HibernateUtil.getSession();
- //获取事务
- tx = session.getTransaction();
- //开启事务
- tx.begin();
- //被保存后 user处于持久状态,session开始管理该对象
- //处于持久状态的数据 session会进行脏数据检查
- session.save(user);
- user.setName("菜10");
- //提交事务----提交事务后进行脏数据检查后 会进行数据同步
- tx.commit();
- } catch (Exception e) {
- if(tx!=null)
- tx.rollback();
- }finally {
- HibernateUtil.close();
- }
- //user处于游离状态 session不管理user
- System.out.println("user==="+user);
- }
- }
5.对象的生命周期二:
get---->直接进入持久化状态---->clear------>游离状态------>update------->持久化状态------->delete------->瞬时状态
- @Test
- public void testSession2(){
- Session session = null;
- Transaction tx = null;
- User user=null;
- try {
- session = HibernateUtil.getSession();
- //获取事务
- tx = session.getTransaction();
- //开启事务
- tx.begin();
- //直接从数据库中获取数据 数据处于持久状态
- user = (User)session.get(User.class, 3);
- //清理session中的所有数据 user不被session管理 处于游离状态
- session.clear();
- user.setName("卫斯理");
- user.setAge(90);
- //执行更新操作后 user处于持久状态
- session.update(user);
- //执行delete处于瞬时状态
- session.delete(user);
- tx.commit();
- } catch (Exception e) {
- if(tx!=null)
- tx.rollback();
- }finally {
- HibernateUtil.close();
- }
- //user处于瞬时状态 session不管理user
- System.out.println("user==="+user);
- }
6.对象生命状态总结
瞬时状态:session中没有,数据库中也没有
持久状态:session中有,数据库中也有
游离状态:session中没有,数据库中有
7.在执行对象的删除和对象的更新时,应遵循对象的生命周期状态图,也就是应该先查询后更新或删除。
java之hibernate之session中对象的生命周期的更多相关文章
- JAVA面试题:Spring中bean的生命周期
Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一 ...
- SOUI中对象的生命周期管理
C++程序员最难的一环就是处理内存泄漏. 很多情况下,一个对象在一个模块里分配了内存,忘记了释放,或者在另一个模块里释放都会导致内存相关的问题. SOUI中大部分暴露在应用层的对象都使用类似COM的引 ...
- [原创]java WEB学习笔记47:Servlet 监听器简介, ServletContext(Application 对象), HttpSession (Session 对象), HttpServletRequest (request 对象) 监听器,利用listener理解 三个对象的生命周期
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- hibernate学习系列-----(3)Session 缓存和持久化生命周期以及Session 基本操作
Session缓存原理 为了能够在控制台更好的看到我们的hibernate干了些什么,可以在hibernate.cfg.xml文件中写入如下配置: <!-- print all generate ...
- 第四章 Spring.Net 如何管理您的类___对象的生命周期链
各位,实在不好意思,因为有事,博客几天没更新了.前面有童鞋提到,配置 Objects.xml 路径的相关问题,这些东西是 IResource 接口的一些内容.在下一章会详细介绍. 传统的Net应用中, ...
- Hibernate中Java对象的生命周期
一个对象的出生源于我们的一个new操作,当我们使用new语句创建一个对象,这个对象的生命周期就开始了,当我们不在有任何引用变量引用它,这个对象就的生命就此结束,它占用的内存就可以被JVM的垃圾回收器回 ...
- [原创]java WEB学习笔记94:Hibernate学习之路---session 的管理,Session 对象的生命周期与本地线程绑定
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Hibernate 通过 Session 操纵对象
Session 概述 •Session 接口是 Hibernate 向应用程序提供的操纵数据库的最主要的接口, 它提供了基本的保存, 更新, 删除和加载 Java 对象的方法. •Session 具有 ...
- Hibernate学习(4)- Hibernate对象的生命周期
1.Hibernate对象的生命周期(瞬时状态.持久化状态.游离状态) 1.瞬时状态(Transient): 使用new操作符初始化的对象就是瞬时状态,没有跟任何数据库数据相关联:2.持久化状态(Pa ...
随机推荐
- Spark-Streaming kafka count 案例
Streaming 统计来自 kafka 的数据,这里涉及到的比较,kafka 的数据是使用从 flume 获取到的,这里相当于一个小的案例. 1. 启动 kafka Spark-Streaming ...
- MyBatis你只写了接口为啥就能执行SQL啊?
一.静态代理 又是一年秋招季,很多小伙伴开始去大城市打拼.来大城市第一件事就是租房,免不了和中介打交道,因为很多房东很忙,你根本找不到他.从这个场景中就可以抽象出来代理模式: ISubject:被访问 ...
- (转载)golang 整数常量INT_MAX INT_MIN最大值最小值
转载地址:https://blog.csdn.net/bdss58/article/details/78388858 在C语言中,有标准库limits.h定义了一些最大最小值常量,例如int类型的最大 ...
- solr 使用
Solr安装 1:安装 Tomcat,解压缩即可. 2:解压 solr. 3:把 solr 下的dist目录solr-4.10.3.war部署到 Tomcat\webapps下(去掉版本号). 4:启 ...
- linux学习(3):linux常用命令大全
Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错.我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短 ...
- Can not add Newtonsoft.Json.Linq.JValue to Newtonsoft.Json.Linq.JObject.
https://blog.csdn.net/zhouyingge1104/article/details/83307637 C#项目中使用NewtonSoft.json,报错提示: Can not a ...
- N以内的素数计算(Java代码)
列出小于N的所有素数 普通计算方式, 校验每个数字 优化的几处: 判断是否整除时, 除数使用小于自身的平方根的素数 大于3的素数, 都在6的整数倍两侧, 即 6m - 1 和 6m + 1 publi ...
- ingress nginx https配置
3.https配置第一步:制作自签证书 [root@master demo]# openssl genrsa -out tls.key 2048 [root@master demo]# openssl ...
- android -------- AES加密解密算法
AES加密标准又称为高级加密标准Rijndael加密法,是美国国家标准技术研究所NIST旨在取代DES的21世纪的加密标准.AES的基本要求是,采用对称分组密码体制,密钥长度可以为128.192或25 ...
- Electron 入门第一篇
官网:http://electronjs.org/docs/tutorial/application-architecture 转载:https://blog.csdn.net/qq_33323731 ...