• Hibernate PO对象的状态


    HibernatePO对象有三种状态:临时状态(又称临时态)、持久状态(又称为持久态)和脱管状态(又称为脱管态、游离态)。处理持久态的对象也称为PO,临时对象和脱管对象也称为VO

    1、临时态:

    简单来说,由new命令开辟内存空间时刚生成的java对象就是处于临时态。

    比如:

       User user = new User();

    如果没有变量对该对象进行引用,它将被java虚拟机回收。

    临时对象在内存中是孤立存在的,它是携带信息的载体,不和数据库的数据有任何关联关系。在hibernate中,可以通过Sessionsave()或者savaOrUpdate()方法将临时对象与数据库相关联,并插入数据库,转变成持久化对象。

     

    2、持久态:

    持久化状态,该对象在数据库中具有对应的一条记录,并拥有一个持久化标识(如:Integer id 其实对应的就是记录表的一个主键)。如果hibernate 中的Dao层方法delete(),就会把对应的持久化对象变为临时对象,对应数据库中的记录也会被删除,不再与数据库的记录关联。

    总结一下,持久化对象特点:

       (1)和Session实例关联;

       (2)与数据库中有与之关联的记录;

     

    3、脱管态(游离态):

    当与某持久化对象关联的Session被关闭后,该持久化对象转变为脱管对象。脱管对象被重新关联到Session上时,将再次转变成持久化对象。

    注意:脱管对象拥有数据库的识别值,可通过update()savaOrUpdate()等方法,转变成持久对象。

    脱管对象特点:

       (1)本质上与临时对象相同,在没有任何变量引用它时,JVM会在核实的时候将它回收;

       (2)比临时对象多了一个数据库记录标识值;

     

    4、Session中常用方法对PO对象状态的作用

    临时状态、持久化状态和脱管状态(也就是游离状态),三种状态转化的方法都是通 过session来调用,瞬态到持久态的方法有save()、saveOrUpdate()、get()、load();持久态到瞬态的方法有 delete();游离态到持久态的方法有update()、saveOrUpdate()、lock();持久态到游离态的方法 有:session.close()、session.evict()、session.clear()。

     

     

    5、save()update()的区别

     

    save()的作用是保存一个新的对象,update()可以把一个脱管状态的对象(一定要和一个记录对应)更新到数据库。

     

     

     

    6、update()saveOrUpdate()区别

     

    saveOrUpdate()方法基本上就是合成了save()update()

     

    通常下面的场景会使用到update()saveOrUpdate()::

     

       (1)程序在第一个Session中加载对象,接着把Session()关闭;

     

       (2)该对象被传递到表示层;

     

       (3)对象发生了一些改动;

     

       (4)该对象被返回到业务逻辑层最终到达持久层;

     

       (5)程序创建第二个Session,调用第二个Sessionupdate()方法持久化这些改动

     

     

  • 相关阅读:
    SQLServer之删除索引
    SQLServer之修改索引
    SQLServer之创建辅助XML索引
    SQLServer之创建主XML索引
    SQLServer之创建全文索引
    SQLServer之创建唯一非聚集索引
    SQLServer之创建唯一聚集索引
    SQLServer之创建非聚集索引
    SQLServer之添加聚集索引
    给NSMutableArray添加copy属性就变成了NSArray
  • 原文地址:https://www.cnblogs.com/luihengk/p/4586827.html
Copyright © 2020-2023  润新知