1. session是用来执行对象的crud操作,并且session是对象事务工厂。session是线程级别的,所以生命周期比较短。

2.session中对象的生命周期图:

3.session中对象的状态

瞬时状态

持久状态

游离状态

4.对象的生命周期一:

new---->瞬时状态----->save------>持久状态----->close----->游离状态

  1. public class HibernateTest {
  2. @Test
  3. public void testSession1(){
  4. Session session = null;
  5. Transaction tx = null;
  6. User user=null;
  7. try {
  8. //user处于瞬时状态,session没有管理该对象
  9. user = new User();
  10. user.setName("小菜");
  11. user.setAge(40);
  12. session = HibernateUtil.getSession();
  13. //获取事务
  14. tx = session.getTransaction();
  15. //开启事务
  16. tx.begin();
  17. //被保存后 user处于持久状态,session开始管理该对象
  18. //处于持久状态的数据 session会进行脏数据检查
  19. session.save(user);
  20. user.setName("菜10");
  21. //提交事务----提交事务后进行脏数据检查后 会进行数据同步
  22. tx.commit();
  23.  
  24. } catch (Exception e) {
  25. if(tx!=null)
  26. tx.rollback();
  27. }finally {
  28.  
  29. HibernateUtil.close();
  30. }
  31. //user处于游离状态 session不管理user
  32. System.out.println("user==="+user);
  33. }
  34. }

5.对象的生命周期二:
get---->直接进入持久化状态---->clear------>游离状态------>update------->持久化状态------->delete------->瞬时状态

  1. @Test
  2. public void testSession2(){
  3. Session session = null;
  4. Transaction tx = null;
  5. User user=null;
  6. try {
  7. session = HibernateUtil.getSession();
  8. //获取事务
  9. tx = session.getTransaction();
  10. //开启事务
  11. tx.begin();
  12. //直接从数据库中获取数据 数据处于持久状态
  13. user = (User)session.get(User.class, 3);
  14. //清理session中的所有数据 user不被session管理 处于游离状态
  15. session.clear();
  16. user.setName("卫斯理");
  17. user.setAge(90);
  18. //执行更新操作后 user处于持久状态
  19. session.update(user);
  20. //执行delete处于瞬时状态
  21. session.delete(user);
  22. tx.commit();
  23.  
  24. } catch (Exception e) {
  25. if(tx!=null)
  26. tx.rollback();
  27. }finally {
  28.  
  29. HibernateUtil.close();
  30. }
  31. //user处于瞬时状态 session不管理user
  32. System.out.println("user==="+user);
  33. }

6.对象生命状态总结

瞬时状态:session中没有,数据库中也没有

持久状态:session中有,数据库中也有

游离状态:session中没有,数据库中有

7.在执行对象的删除和对象的更新时,应遵循对象的生命周期状态图,也就是应该先查询后更新或删除。

java之hibernate之session中对象的生命周期的更多相关文章

  1. JAVA面试题:Spring中bean的生命周期

    Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一 ...

  2. SOUI中对象的生命周期管理

    C++程序员最难的一环就是处理内存泄漏. 很多情况下,一个对象在一个模块里分配了内存,忘记了释放,或者在另一个模块里释放都会导致内存相关的问题. SOUI中大部分暴露在应用层的对象都使用类似COM的引 ...

  3. [原创]java WEB学习笔记47:Servlet 监听器简介, ServletContext(Application 对象), HttpSession (Session 对象), HttpServletRequest (request 对象) 监听器,利用listener理解 三个对象的生命周期

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  4. hibernate学习系列-----(3)Session 缓存和持久化生命周期以及Session 基本操作

    Session缓存原理 为了能够在控制台更好的看到我们的hibernate干了些什么,可以在hibernate.cfg.xml文件中写入如下配置: <!-- print all generate ...

  5. 第四章 Spring.Net 如何管理您的类___对象的生命周期链

    各位,实在不好意思,因为有事,博客几天没更新了.前面有童鞋提到,配置 Objects.xml 路径的相关问题,这些东西是 IResource 接口的一些内容.在下一章会详细介绍. 传统的Net应用中, ...

  6. Hibernate中Java对象的生命周期

    一个对象的出生源于我们的一个new操作,当我们使用new语句创建一个对象,这个对象的生命周期就开始了,当我们不在有任何引用变量引用它,这个对象就的生命就此结束,它占用的内存就可以被JVM的垃圾回收器回 ...

  7. [原创]java WEB学习笔记94:Hibernate学习之路---session 的管理,Session 对象的生命周期与本地线程绑定

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. Hibernate 通过 Session 操纵对象

    Session 概述 •Session 接口是 Hibernate 向应用程序提供的操纵数据库的最主要的接口, 它提供了基本的保存, 更新, 删除和加载 Java 对象的方法. •Session 具有 ...

  9. Hibernate学习(4)- Hibernate对象的生命周期

    1.Hibernate对象的生命周期(瞬时状态.持久化状态.游离状态) 1.瞬时状态(Transient): 使用new操作符初始化的对象就是瞬时状态,没有跟任何数据库数据相关联:2.持久化状态(Pa ...

随机推荐

  1. Spark-Streaming kafka count 案例

    Streaming 统计来自 kafka 的数据,这里涉及到的比较,kafka 的数据是使用从 flume 获取到的,这里相当于一个小的案例. 1. 启动 kafka Spark-Streaming ...

  2. MyBatis你只写了接口为啥就能执行SQL啊?

    一.静态代理 又是一年秋招季,很多小伙伴开始去大城市打拼.来大城市第一件事就是租房,免不了和中介打交道,因为很多房东很忙,你根本找不到他.从这个场景中就可以抽象出来代理模式: ISubject:被访问 ...

  3. (转载)golang 整数常量INT_MAX INT_MIN最大值最小值

    转载地址:https://blog.csdn.net/bdss58/article/details/78388858 在C语言中,有标准库limits.h定义了一些最大最小值常量,例如int类型的最大 ...

  4. solr 使用

    Solr安装 1:安装 Tomcat,解压缩即可. 2:解压 solr. 3:把 solr 下的dist目录solr-4.10.3.war部署到 Tomcat\webapps下(去掉版本号). 4:启 ...

  5. linux学习(3):linux常用命令大全

    Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错.我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短 ...

  6. 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 ...

  7. N以内的素数计算(Java代码)

    列出小于N的所有素数 普通计算方式, 校验每个数字 优化的几处: 判断是否整除时, 除数使用小于自身的平方根的素数 大于3的素数, 都在6的整数倍两侧, 即 6m - 1 和 6m + 1 publi ...

  8. ingress nginx https配置

    3.https配置第一步:制作自签证书 [root@master demo]# openssl genrsa -out tls.key 2048 [root@master demo]# openssl ...

  9. android -------- AES加密解密算法

    AES加密标准又称为高级加密标准Rijndael加密法,是美国国家标准技术研究所NIST旨在取代DES的21世纪的加密标准.AES的基本要求是,采用对称分组密码体制,密钥长度可以为128.192或25 ...

  10. Electron 入门第一篇

    官网:http://electronjs.org/docs/tutorial/application-architecture 转载:https://blog.csdn.net/qq_33323731 ...