Hibernate应用中Java对象的状态

当应用程序通过new语句创建了一个对象,这个对象的生命周期就开始了,当不再有任何引用指向它的时候,这个对象就结束生命周期,它占用的内存就可以被JVM的垃圾回收器回收

对于需要被持久化的Java对象,在它的生命周期中。可处于以下三个状态之一

  • 瞬时状态(临时状态) transient:刚刚用new创建,还没有被持久化,不处于Session的缓存中,处于临时状态的Java对象被称为临时对象(无数据、无Session)
  • 持久化状态 persistent:已经被持久化,加入到Session的缓存中。处于持久化状态的Java对象被称为持久化对象(有数据,有Session)
  • 游离状态 detached:已经被持久化,但不再处于Session的缓存中。处于游离状态的Java对象被称为游离对象(有数据,无Session)

 

程序代码

Person对象的生命周期

Person对象的状态

tx=session.beginTransaction();

Person person=new Person(“张三”);

开始生命周期

临时状态

session.save(person);

处于生命周期中

转变为持久化状态

Long id=person.getId();

person=null;

Person person2=(Person)session.load(Person.class,id);

tx.commit();

处于生命周期中

处于持久化状态

session.close()

处于生命周期中

转变为游离状态

System.out.println(person2.getName());

处于生命周期中

处于游离状态

person2=null;

结束生命周期

结束生命周期

 

 

临时状态的特征:

  • 不处于Session的缓存中,也可以说,不被任何一个Session实例关联
  • 在数据库中没有对应的记录

在以下情况下,Java对象进入临时状态

  • 当通过new语句创建了一个Java对象,它处于临时状态,此时不和数据库中的任何记录对应
  • Session的delete()方法能使一个持久化对象或游离对象转变为临时对象。对于游离对象,delete()方法从数据库中删除与它对应的记录;对于持久对象,delete()方法从数据库中删除与它对应的记录,并且把它从Session的缓存中删除

 

 

持久化对象的特征:

  • 位于一个Session实例的缓存中,也可以说,持久化对象总是被一个Session实例关联
  • 持久化对象和数据库中的相关记录对应
  • Session在清理缓存时,会根据持久化对象的属性变化,来同步更新数据库

Session的许多方法都能够触发Java对象进入持久化状态

  • Session的save()方法把临时对象转变为持久化对象
  • Session的load()或get()方法返回的对象总是处于持久化状态
  • Session的list()方法返回的List集合中存放的都是持久化对象
  • Session的update()、saveOrUpdate()使游离对象转变为持久化对象
  • 当一个持久化对象关联一个临时对象,在允许级联保存的情况下,Session在清理缓存时会把这个临时对象也转变为持久化对象

 

 

游离对象的特征:

  • 不再位于Session的缓存中,也可以说,游离对象不被Session关联
  • 游离对象是由持久化对象转变过来的,因此在数据库中可能还存在与它对应的记录(前提条件是没有其他程序删除了这条记录)

转载于:https://www.cnblogs.com/cnjava/archive/2012/07/21/2602297.html

Hibernate应用中Java对象的状态相关推荐

  1. (转)Hibernate框架基础——在Hibernate中java对象的状态

    http://blog.csdn.net/yerenyuan_pku/article/details/52760627 在Hibernate中java对象的状态 Hibernate把对象分为4种状态: ...

  2. jsp九大内置对象与servlet中java对象

    jsp九大内置对象 request对象 : getParameter(String name)获取表单提交的数据 getParamegerNames() 获取客户端提交的所有参数名 getAttrib ...

  3. (转)Hibernate框架基础——Java对象持久化概述

    http://blog.csdn.net/yerenyuan_pku/article/details/52732990 Java对象持久化概述 应用程序的分层体系结构 基于B/S的典型三层架构   说 ...

  4. java对象的状态由什么表示_持久化层的Java对象可处于哪些状态?这些状态有哪些特征?...

    当应用程序通过new语句创建了一个对象,这个对象的生命周期就开始了,当不再有任何引用变量引用它,这个对象就结束生命周期,它占用的内存就可以被JVM的垃圾回收器回收.对于需要被持久化的Java对象,在它 ...

  5. 一文看懂虚拟机中Java对象的生死判别

    j3_liuliang 通过上面两篇的介绍,相信大家已经知道虚拟机的内存布局和对象创建的过程及在虚拟机中的分布的,那么一个对象创建出来是不可能永生的总会有死亡的时候而虚拟机是如何判定一个对象的生死那就 ...

  6. java对象的状态,Java编程菜鸟课程:状态对象

    这是一个实战中非常重要但是容易被忽视的概念,说它重要,是因为它比Datcbase重要:说它容易被忽视也是同样的原因,它经常被Datcbase概念替代. 如果你经验和经历中没有状态这个概念,极端地说:可 ...

  7. 对象转数组_fastJson中java对象 jsonObject jsonArray之间转换

    一.介绍 简介:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式 二.使用 1.java对象转jsonObject User u = new User(); ...

  8. Spring Boot 项目中Java对象的字符串类型属性值转换为JSON对象的布尔类型键值的解决方法及过程

    文章目录 场景描述 示例说明 解决历程 @JsonFormat是否能解决问题? 万能方案-调试 替代方案 补充知识 Java对象与JSON对象的序列化与反序列化 相关注解说明 后记 场景描述 在Spr ...

  9. Servlet中response对象Commit状态的分析

    response是服务端对客户端请求的一个响应,其中封装了响应头.状态码.内容(也就是最终要在浏览器上显示的HTML代码或者其他数据格式)等. 服务端在把response提交到客户端之前,会使用一个缓 ...

  10. hibernate中对象的状态有三种

    一,首先hibernate中对象的状态有三种:瞬态.游离态和持久态,三种状态转化的方法都是通过session来调用,瞬态到持久态的方法有save().saveOrUpdate().get().load ...

最新文章

  1. [ZJOI2018]历史
  2. Jconsole远程监控tomcat 的JVM内存(linux、windows)
  3. 面向对象编程(一)——面向对象和面向过程
  4. 吴恩达机器学习Week4神经网络表述
  5. 最新最全的java多线程基础总结(上)
  6. c++头文件_51单片机C语言编程知多少:几人不知头文件,你要的干货在这里了
  7. python requests编码的问题_python requests 编码问题
  8. mysql之select+五种子句的理解
  9. php使用使用外部变量的值,PHP实现函数内修改外部变量值的方法示例
  10. 使用NoSQL Manager for MongoDB客户端连接mongodb
  11. php access类,一个简洁的PHP操作Access类
  12. 存储过程和transaction
  13. SVN删除或新建(添加)文件
  14. 我毕业一年后。生活的艰辛。我的程序人生该怎么走
  15. x230无线网卡驱动服务器版,联想X230网卡驱动
  16. 基于html的2048小游戏,基于jQuery的2048小游戏设计(网页版)
  17. linux系统下CPU利用率的计算
  18. 车型代号对照表_2017年最新主机厂OEM车型代号对照表
  19. WIFI接口定义知识介绍
  20. bash shell脚本实例合集

热门文章

  1. 简繁体在线切换JS插件
  2. 红帽RHEL5U4平台实现pppoe+freeradius+mysql认证服务器(一)
  3. 程序员的生活照,最后一个绝了!有同感吗?
  4. 趣图:程序猿和运维狗的工作日常……
  5. 想做视频号,先纠正一点
  6. 小程序发布,你方了么?
  7. Google出品,必属精品
  8. Python基础之变量、输入、输出
  9. 应用:文件夹copy器(多进程版)
  10. Go语言学习笔记(八)