`

对象的几种状态

阅读更多
对象的几种状态





1.Transient
刚new一个对象在内存中

2.Persistent
内存中有new 对象
缓存里Session中的HashMap<key,value>里  value的值就是该对象,如果commit,缓存里的session就没有了
数据库里有
public void testUpdate4() {
		Session session = sessionFactory.getCurrentSession();
		session.beginTransaction();
		Teacher t = (Teacher)session.get(Teacher.class, 1); //session调用get之前是Transient状态,调用get之后t对象处于Persistent状态
		t.setName("新名字1");
		session.getTransaction().commit(); //session结束事务时,发现name与数据库中name值不一致时,会调用Update修改数据库
                     t.setName("新名字2");  //此时的t对象处于Detached状态

	}


3.Detached
内存里有
数据库里有





Hibernate实体对象的三种状态?

瞬时状态(Transient):当一个”对象”没有与数据库中的数据发生关系(即在数据库中是找不到的)与”数据库中”的数据没有了--<关联>;?

持久状态(Persistent):对象属于Session管理的就为持久化对象;对象属于Session管理的就为持久化对象;

游离状态(Detached):当session关闭后,对象不受session管理了,但该对象,在数据库
中是有关联,则认为是游离的;





三种状态之间的转变:

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

Session的许多方法都能够触发Java对象进入持久化状态
(1) Session的save()方法把临时对象转变为持久化对象。
(2) Session的load()或get()方法返回的对象总是处于持久化状态。
(3) Session的find()方法返回的List集合中存放的都是持久化对象。
(4) Session的update()、saveOrUpdate()和lock()方法使游离对象转变为持久化对象。
(5)当一个持久化对象关联一个临时对象,在允许级联保存的情况下,Session在清理缓存时
会把这个临时对象也转变为持久化对象。 

Session的以下方法使持久化对象转变为游离对象
(1)游离对象是由持久化对象转变过来的,因此在数据库中可能还存在与它对应的记录(前提条件是没有其他程序删除了这条记录)。
(2)Session的evict()方法能够从缓存中删除一个持久化对象,使它变为游离状态。当Session的缓存中保存了大量的持久化对 象,会消耗许多内存空间,为了提高性能,可以考虑调用evict()方法,从缓存中删除一些持久化对象。但是多数情况下不推荐使用evict()方法,而应该通过查询语言,或者显式的导航来控制对象图的深度。
(3)Session调用close方法或者session.getTransaction().commit()
   
  • 大小: 21.6 KB
分享到:
评论

相关推荐

    hibernate对象三种状态

    hibernate对象三种状态,有详细的代码介绍三种状态,易理解,有具体代码实现,有详细备注,让你轻松理解三种状态的存在形式

    状态模式Java实现示例

    状态模式(State Pattern)是一种行为设计模式,它允许一个对象在其内部状态改变时改变它的行为。这个对象看起来好像修改了它的类。状态模式主要解决的是当一个对象的行为依赖于它的状态时,如何将这些状态从对象中...

    JSP的九个内置对象及四个作用域

    “Request”对象代表的是来自客户端的请求,例如我们在FORM表单中填写的信息等,最常用的对象方法有getParameter、getParameterNames和getParameterValues通过这几个方法来获取请求对象中所包含的参数的值,此对象...

    面向对象分析与设计练习题

    它的业务是:将学员发来的信件收集分类后,按几种不同的情况处理。如果是报名的,则将报名数据送给负责报名事务的职员,他们将查阅课程文件,检查该课程是否额满,然后在学生文件、课程文件上登记,并开出报告单交...

    oracle系统状态trace文件分析器

    就用该方法  system state dumps ==&gt; 整个系统的所有进程中的所有对象状态 &lt;br&gt;进程状态转储可以用以下几种方式: process state dumps: 1.ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME PROCESS...

    面向对象与UML资料

    对单个对象的重要行为进行建模:状态图 96 第九章 GRASP: 职责分配模式 97 导言 97 职责和方法 98 UML类图表示方法 98 职责和交互图 98 模式 99 GRASP: 职责分配中通用原则的模式 99 专家 99 问题: 99 解决方案: ...

    原型模式(Prototype Pattern)原理图

    原型模式适用于以下几种场景: 1. 当对象的构造过程消耗资源较多,但需要大量相似的对象时。 2. 当需要在运行时动态地创建新对象,但不希望使用构造函数的方式。 3. 当需要创建一个与现有对象具有相同状态的新对象...

    【05-面向对象(下)】

    •打印对象和toString方法:toString方法是系统将会输出该对象的“自我描述”信息,用以告诉外界对象具有的状 态信息。 •Object 类提供的toString方法总是返回该对象实现类的类名 + @ +hashCode值。 •==...

    面向对象分析与设计课程设计 宠物救助申请管理系统项目设计报告 原创 48页课程大作业

    在本次课程设计实践中,针对宠物救助申请管理系统的项目,学习使用了用例图、概念类图、时序图等多种UML视图,工厂方法模式、状态模式等几种设计模式,可以说是第一次真正意义上从头开始正式的软件设计开发

    轻松掌握JavaScript状态模式

    (有些对象通常会有好几个状态,在每个状态都只可以做当前状态才可以做的事情,而不能做其它状态能做的事儿)  2.一个操作中含有大量的分支语句,而且这些分支语句依赖于该对象的状态。状态通常为一个或多个枚举...

    精通Hibernate:对象持久化技术第二版part3

    本章主要介绍关系数据库中的代理主键(不具有业务含义),接着介绍Hibernate提供的几种内置标识符生成器的用法及适用范围。 6.1 关系数据库按主键区分不同的记录 123 6.1.1 把主键定义为自动增长标识符类型 123 ...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    本章主要介绍关系数据库中的代理主键(不具有业务含义),接着介绍Hibernate提供的几种内置标识符生成器的用法及适用范围。 6.1 关系数据库按主键区分不同的记录 123 6.1.1 把主键定义为自动增长标识符类型 123 ...

    超级有影响力霸气的Java面试题大全文档

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 17、...

    类图、时序图、状态图-ATM系统.ppt

    面向对象分析的基本过程包括抽取和整理用户需求、建立问题域精确模型、理解、表达和验证几个步骤。 在面向对象分析中,有三个子模型:对象模型、动态模型和功能模型。对象模型是静态结构的描述,动态模型是交互次序...

    第二课时-无状态应用与服务.docx

    Kubernetes中的大部分概念Node、Pod、Replication Controller、Service等都可以看作一种“资源对象”,几 乎所有的资源对象都可以通过kubectl工具(API调用)执行增、删、改、查等操作并将其保存在etcd中持久化 存储...

    面向对象技术.rar

    详细介绍了类图、状态图、UML中的几种图的使用方法

    css几种解决inline-block间隙的方案(整理)

    display有几种属性: inline是内联对象,比如&lt;a&gt; 、 标签等,可以“堆在一起”显示,宽高由内容决定,不能设置; block是块对象,比如、标签等,要占一整行,但是宽高可以自定义;为了弥补inline和block的不足,又...

Global site tag (gtag.js) - Google Analytics