`

对象的几种状态

阅读更多
对象的几种状态





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进行数据操作至关重要。 ### 1. 持久态(Persistent) **持久态**是指对象已经被Hibernate管理,并且其状态与数据库中的记录同步。...

    ASP.NET中几种状态管理技术的分析与比较.pdf

    本文将深入探讨ASP.NET中的几种状态管理技术,包括它们的工作原理、优缺点以及适用场景。 ### 1. Cookie状态管理 Cookie是一种在客户端存储信息的小型文本文件,它由服务器生成并通过HTTP响应发送给客户端浏览器,...

    JPA学习笔记-EJB-05JPA实体对象状态和实体对象的高级操作

    根据实体对象与实体管理器(EntityManager)之间的交互关系,实体对象可以处于以下几种状态: 1. **瞬时状态(Transient State)** 当一个实体对象刚刚被创建出来但还未被实体管理器管理时,它处于瞬时状态。此时...

    asp.net系统对象与状态保持

    ASP.NET提供了几种常用的状态保持技术: 1. **Cookie**: - Cookie是一种存储在客户端的小型文本文件(通常不超过4KB),用于跟踪用户状态。可以通过`Response.Cookies`来设置Cookie,通过`Request.Cookies`来读取...

    C#面向对象设计模式纵横谈(22):(行为型模式) State 状态模式

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。在C#编程中,这种模式被广泛应用于处理具有多种状态的对象,使得对象的状态转换更加清晰和易于管理。 状态模式的...

    浅谈线程的几种可用状态

    浅谈线程的几种可用状态 线程是操作系统中的一种基本概念,它可以帮助我们更好地管理系统资源和提高系统的效率。线程有多种状态,这些状态之间可以相互转换,了解这些状态对于我们编写高效的多线程程序非常重要。 ...

    c语言状态机资料-unlocked_面向对象分析_行为继承_状态机_

    在学习过程中,读者可能会接触到状态机的几种常见类型,如有限状态机(FSM)、有向图状态机、扩展状态机等,并学习如何根据需求选择合适的状态机模型。 此外,资料可能还会讨论状态机设计中的最佳实践,如使用工厂...

    UML样例图 对象图 状态图 活动图

    以下是UML中几种关键图的详细介绍: 1. **用例图**: - 用例图展示了系统与外部用户或系统(称为参与者)之间的交互。它定义了系统的主要功能,即用例,以及参与者如何与这些用例进行交互。 - 建立用例图的步骤...

    Hibernate 三种状态

    在 Hibernate 中,对象的状态管理是其核心特性之一,主要包括三种状态:瞬时状态(Transient)、持久化状态(Persistent)以及游离状态(Detached)。本文将详细阐述这三种状态的特点及其转换机制。 #### 二、瞬时...

    javascript面向对象编程的几种模式详解

    以下是对标题和描述中提到的几种JavaScript面向对象编程模式的详细解释: 1. **构造函数与字面量结合模式** 在JavaScript中,我们可以通过构造函数和字面量语法来创建对象。构造函数用于定义对象的类型,而字面量...

    Java 23种设计模式24状态模式.pdf

    状态模式主要由以下几种角色构成: - **Context(环境类)**:持有状态对象的引用,并提供接口供客户端调用,同时根据当前状态调用相应状态对象的方法。 - **State(抽象状态类)**:定义一个接口,封装与Context的...

    java的几种对象(PO_VO_DAO_BO_POJO)解释

    值对象(VO)是一种无状态的对象,它代表了一组值的集合。在Java应用程序中,VO通常用于封装数据,并在不同的层次间传递数据。VO并不持久化到数据库,也不包含任何业务逻辑,其主要目的是简化数据传输过程,提高代码...

    MFC的状态 模块状态、进程状态、线程状态。

    每个应用程序的模块都有自己的状态信息,主要包括以下几部分: - **Windows实例句柄**:用于加载资源。 - **指向当前`CWinApp`或`CWinThread`对象的指针**:这有助于管理应用程序级别的资源。 - **OLE模块的引用...

    C#实现treeview节点三种选择状态

    通过以上步骤,我们可以在C#中实现一个具备全选、未选和半选三种状态的TreeView控件。这样的功能可以极大地提高用户在处理复杂树形结构时的交互体验,特别是在需要独立控制每个节点及其子节点选中状态的情况下。

    服务器状态监控-状态模式

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变它的行为,使对象看起来好像改变了它的类。在服务器监控的上下文中,我们可以将这一模式应用到各种组件的状态检测和管理中。 首先,让我们理解什么是...

    Asp.net状态管理

    本文将详细介绍ASP.NET中的几种状态管理方法,包括客户端状态管理和服务器端状态管理。 #### 二、HTTP协议与无状态链接 HTTP(HyperText Transfer Protocol)是一种用于传输超文本的应用层协议,它是基于请求/响应...

    设计模式之状态模式实例

    让我们以一个简单的例子来说明:假设我们有一个自动售货机,它可以有以下几种状态:等待投币(WaitingForCoin)、等待选择商品(WaitingForSelection)、等待退币(WaitingForRefund)和交易完成...

    vc下的状态机程序,演示程序1为"用过程编程的方法实现FSM的源程序代码";演示程序2为"用面向对象方法实现FSM的源程序代码

    3. 编写一系列处理事件的函数,每个函数对应于一种状态的行为。 4. 在事件处理函数中,根据当前状态和输入事件更新状态。 接下来,我们转向面向对象编程(OOP)方法。在OOP中,状态机通常通过类来表示,每个状态是...

    Java基础复习笔记02对象状态、引用种类、垃圾回收形式

    JVM中主要采用以下几种垃圾回收算法: 1. **标记-清除算法**:这是最基础的收集算法,分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。 2. **复制算法**...

    GOF之状态机

    状态机是一种设计模式,它是软件工程中用于模拟具有多种状态并根据特定条件在这些状态之间转换的对象的行为。GOF(Gang of Four)是四位著名的设计模式专家,他们在其著作《设计模式:可复用面向对象软件的基础》中...

Global site tag (gtag.js) - Google Analytics