`
newleague
  • 浏览: 1509300 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

三种状态

阅读更多

(madp:

如:

session.beginTransaction();

Person p = new Person();
p.setId(169);
session.delete(p);

是不能删除记录的,因为p处于临时状态

)

 

在Hibernate中,对象有三种状态:临时状态、持久状态和游离状态。
临时状态:当new一个实体对象后,这个对象处于临时状态,即这个对象只是一个保存临时数据的内存区域,如果没有变量引用这个对象,则会被jre垃圾回收机制回收。这个对象所保存的数据与数据库没有任何关系,除非通过Session的save或者SaveOrUpdate把临时对象与数据库关联,并把数据插入或者更新到数据库,这个对象才转换为持久对象。
例如:Emp e=new Emp();    //创建临时对象
          e.setEmpno((long) 8888);
          e.setEName("mike");
          ...
          EmpDAO d=new EmpDAO();
          d.save(e);      //持久化
          ...

持久状态:持久化对象的实例在数据库中有对应的记录,并拥有一个持久化表示(ID)。对持久化对象进行delete操作后,数据库中对应的记录将被删除,那么持久化对象与数据库记录不再存在对应关系,持久化对象变成临时状态。
    持久化对象被修改变更后,不会马上同步到数据库,知道数据库事务提交。在同步之前,持久化对象是脏的(Dirty)。
例如:
          Emp e=new Emp(); //创建了临时的对象
          EmpDAO edao= new empDAO();
          e=edao.findbyEmpno((long) 7786);    //使对象与数据库记录对应,从而持久化
          e.setEname("新的名字");                     //修改了持久化对象,使之处于 Dirty
          ......
          edao.saveorupdate(e);                      //保存,但是仍然 Dirty
          tran.commit();                                     //提交,实现与数据库同步,不再Dirty
          ......

游离状态:当Session进行了Close、Clear或者evict后,持久化对象虽然拥有持久化标识符和与数据库对应记录一致的值,但是因为会话已经消失,对象不在持久化管理之内,所以处于游离状态(也叫:脱管状态)。游离状态的对象与临时状态对象是十分相似的,只是它还含有持久化标识。


其中,持久化状态的对象,简称为:PO
而临时状态和游离状态的对象,简称为: VO

 

(madp:

 

    本文介绍Hibernate的三个状态,此为第一部分。Java应用程序与Hibernate之间的主要运行时接口。它是抽象了持久化服务概念的核心抽象API类。

     

    Java应用程序与Hibernate之间的主要运行时接口。它是抽象了持久化服务概念的核心抽象API类。
    Session的生命周期绑定在一个物理的事务(tansaction)上面。(长的事务可能跨越多个数据库事物。)

    Session的主要功能是提供对映射的实体类实例的创建,读取和删除操作。
    实例可能以下面三种状态存在:
    ◆自由状态(transient): 不曾进行持久化,未与任何Session相关联
    ◆持久化状态(persistent): 仅与一个Session相关联
    ◆游离状态(detached): 已经进行过持久化,但当前未与任何Session相关联

    游离状态的实例可以通过调用update(),lock(),replicate(),save(),persist()或者saveOrUpdate()方法进行持久化。持久化实例可以通过调用 delete()变成游离状态。通过get()或load()方法得到的实例都是持久化状态的。游离或者自由状态下的实例可以通过调用merge()方法成为一个新的持久化实例。
    save()和persist()将会引发SQL的INSERT,delete()会引发SQLDELETE,而update()或merge()会引发SQLUPDATE。对持久化(persistent)实例的修改在刷新提交的时候会被检测到,它也会引起SQLUPDATE。saveOrUpdate()或者replicate()会引发SQLINSERT或者UPDATE。

    其具体实现并不一定是线程安全的。每个线程/事务应该从一个SessionFactory获取自己的session实例。

    如果其持久化对象类是可序列化的,则Session实例也是可序列化的。

    一个典型的事务应该使用下面的形式:Session sess = factory.openSession();

  1. Transaction tx;  
  2. try {  
  3. tx = sess.beginTransaction();  
  4. //do some work  
  5. ...  
  6. tx.commit();  
  7. }  
  8. catch (Exception e) {  
  9. if (tx!=null) tx.rollback();  
  10. throw e;  
  11. }  
  12. finally {  
  13. sess.close();  
  14. 如果Session抛出了异常, 事务必须回滚而session会被废弃。在异常发生后Session的内部状态可能会与数据库失去同步

)

分享到:
评论

相关推荐

    treeview 复选框 三种状态

    本主题将深入探讨“treeview 复选框 三种状态”,以及如何在实际应用中实现和管理这些状态。 1. TreeView 复选框概述: TreeView控件的复选框功能允许用户对节点进行选择,而不仅仅是单击或展开/折叠。复选框通常...

    Android-拥有三种状态纯Material风格的AndroidCheckbox控件

    本文将深入探讨如何实现一个具有三种状态的纯Material风格的Android Checkbox控件,以及与之相关的Android开发知识。 Checkbox在Android中通常用于提供多选选项,它的默认状态只有两种:选中和未选中。然而,有时...

    hibernate对象三种状态

    这三种状态分别对应了对象与数据库的关联程度,理解它们对于高效地使用Hibernate进行数据操作至关重要。 ### 1. 持久态(Persistent) **持久态**是指对象已经被Hibernate管理,并且其状态与数据库中的记录同步。...

    TreeView的CheckBoxs的第三种状态(有部分子结点被选中)

    本篇文章将深入探讨`TreeView`控件中复选框的第三种状态——部分子节点被选中的实现和应用场景。 首先,我们需要理解`TreeView`控件的基本操作。`TreeView`控件由一系列`TreeNode`对象组成,每个`TreeNode`可以包含...

    PB 11.5 CheckBox三种状态的实例

    本实例将详细讲解如何实现CheckBox控件的三种状态:未选中、已选中以及灰色禁用状态,并探讨它们在实际应用中的配置和事件处理。 1. CheckBox的基本结构: CheckBox控件在界面中通常表现为一个小方框,里面可能有...

    OS 三种状态转换图

    操作系统三种状态转换图操作系统三种状态转换图操作系统三种状态转换图操作系统三种状态转换图操作系统三种状态转换图

    TreeView的三种状态实现

    C#实现TreeView的三种状态的实例

    按钮的三种状态(普通、聚焦、按下)

    首先,让我们了解这三种状态的含义: 1. **普通状态**:这是按钮的默认状态,当用户没有对按钮进行任何操作时,按钮通常显示为普通状态。在设计时,我们通常会为这个状态提供一个初始的背景和文字样式。 2. **聚焦...

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

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

    高频功率放大器的三种工作状态

    此外,根据晶体管是否进入饱和区域,还可以将其分为欠压、临界和过压三种状态。下面详细探讨这些工作状态的特点和性能差异。 首先,甲类、乙类和丙类放大器是根据晶体管导通角的大小来分类的。导通角是指在一个交流...

    Hibernate三种状态

    Hibernate对象有三种状态:瞬时状态(Transient)、持久状态(Persistent)和脱管状态(Detached)。理解这些状态对于优化数据操作和避免潜在的问题至关重要。 首先,瞬时状态(Transient)是指通过new关键字创建的...

    checkbox三种状态

    "checkbox三种状态"这个主题聚焦于复选框的三种基本状态:未选中、已选中以及部分选中(如果支持)。复选框的状态管理是构建交互式应用的关键部分,特别是当处理多选数据时。 1. **未选中状态**:这是复选框的初始...

    三种状态树形控件

    本文将详细探讨"三种状态树形控件"这一概念,以及其在实际应用中的重要性。 首先,我们要理解"三种状态树形控件"的基本原理。在传统的二状态树形控件中,每个节点只有两种状态:选中或未选中。但在三种状态树形控件...

    Hibernate 对象的三种状态和特点

    了解Hibernate对象的这三种状态,对于编写高效、稳定的持久化代码至关重要。正确管理对象状态可以帮助优化数据库交互,减少不必要的查询,提高系统的整体性能。在实际开发中,开发者需要根据业务需求和性能考虑,...

    Hibernate 三种状态

    ### Hibernate 三种状态详解 #### 一、引言 Hibernate 是一款开源的对象关系映射 (ORM) 框架,它极大地简化了 Java 应用程序与数据库之间的交互过程。在 Hibernate 中,对象的状态管理是其核心特性之一,主要包括...

    bluetooth slave三种状态

    ### Bluetooth Slave 三种状态详解 蓝牙技术作为一种无线通信标准,被广泛应用于个人设备之间的数据传输。在蓝牙连接中,设备可以扮演主设备(Master)或从设备(Slave)的角色。对于从设备而言,存在三种主要的...

    数据库的三种状态RESTRICT、QUIESCE和SUSPEND(三)

    我们将深入理解这三种状态,并结合实际应用场景进行详细解析。 1. RESTRICT状态: RESTRICT状态通常用于限制对数据库的访问,当数据库被设置为RESTRICT状态时,只有拥有特定权限的用户或进程能够执行操作。这种状态...

    三态门的三种输出状态

    这是三态门最独特的一种状态,也是其名称来源之一。当控制端接收到特定信号(通常是低电平)时,三态门的输出端进入高阻状态。此时,输出端与外部电路之间的电阻极高,几乎相当于断路,因此不会对连接在其上的其他...

    hibernate的三种状态及其相互转换

    这是一个讲解了关于hibernate三种状态之间的转换,如果想知道他们之间的相关总结和理解,这是一个不错的选择

    05_传智播客hibernate教程_实体对象的三种状态与saveOrUpdate方法

    在本教程中,我们将深入探讨实体对象的三种状态以及`saveOrUpdate`方法的工作原理。 首先,让我们了解实体对象的三种状态: 1. **瞬时状态(Transient)**:当一个新的实体对象在内存中创建,但尚未被Hibernate...

Global site tag (gtag.js) - Google Analytics