• Hibernate持久化类和Hibernate持久化对象状态


    一、持久化对象po

    1po定义

      PO,是Persistent Object的缩写,是持久化类。PO是由PO=POJO+hbm映射配置组成。

    2、通俗理解

      PO类即持久化类,其实就是一个普通的JavaBean,只是要申明遵循一定的规则就是一个PO类。

    Hibernate框架中,采用的面向对象的思想实现数据库的CRUD操作.在数据库中每一个表就有一个对应一个持久化对象。PO类可以看成,与数据库表相映射的Java实体对象。最简单的PO类中的属性对应数据库中表的字段名。

    //演示如何创建一个po实体类

    package cn.it.po;
    
    import java.util.Date;  
    
    //1、定义类实体类
    
    public class Book {
    
    //2、定义标识属性 oid
    
    private Integer id;
    
    private String name;
    
    private Double price;
    
    private Date publish;
    
    //2、空参的构造方法
    
    public Book(){
    
    }
    
    //3、创建参数的set/get方法
    
    public Integer getId() {
    
    return id;
    
    }
    
    public void setId(Integer id) {
    
    this.id = id;
    
    }
    
    public String getName() {
    
    return name;
    
    }
    
    public void setName(String name) {
    
    this.name = name;
    
    }
    
    public Double getPrice() {
    
    return price;
    
    }
    
    public void setPrice(Double price) {
    
    this.price = price;
    
    }
    
    public Date getPublish() {
    
    return publish;
    
    }
    
    public void setPublish(Date publish) {
    
    this.publish = publish;
    
    }
    
    }
    
     

    对于hibernate中的PO编写规则:

    1)在PO类必须提供一个标识属性,让它与数据库中表的主键对应,我们管这个属性叫OID   (简单说,PO就是与数据库中主键对应的标识属性)

    2)类的所有属性要private, 对外提供public(共有的)get/set方法

    3)必须提供一个无参数的public构造方法

    4PO类中的属性尽量使用基本数据类型的包装类.

    因为基本数据类型都有自己默认值,而基本类型包装类型的默认值是null,那么我们执行插入数据操作时,如果我们没有给指定的属性赋值,那么它们插入到数据中的默认数据类型是不一样的。

    之前我们谈到了hibernate持久化对象的状态,那么下面来进行一个详细的分析和理解。

    二、Hibernate持久化对象状态

    持久化类类三种状态介绍:临时状态,持久状态,脱管状态。

    1.瞬时态

      瞬时态:也叫做临时态或自由态,它一般指我们new出来的对象,例如: Book bookop = new Book();它不存在OID,hibernate中的session无关联

     ,在数据库中也无记录。它使用完成后,会被jvm直接回收掉,它只是用于信息携带。

    简单说:无OID 与数据库中的信息无关联,不在session管理范围内。

    (1) 当通过new语句刚创建了一个Java对象,它处于临时状态,此时不和数据库中的任何记录对应。

    (2) Sessiondelete()方法能使一个持久化对象或游离对象转变为临时对象。对于游离对象,delete()方法从数据库中删除

    与它对应的记录;对于持久化对象,delete()方法从数据库中删除与它对应的记录,并且把它从Session的缓存中删除。

    2.持久态

    2.持久态:在hibernate session管理范围内,它具有持久化标识OID它的特点,在事务未提交前一直是持久态,

    当它发生改变时,hibernate是可以检测到的。简单说:有OID session管理,在数据库中有可能有,也有可有没有。

    1) Sessionsave()方法把临时对象转变为持久化对象。

    2) Sessionload()get()方法返回的对象总是处于持久化状态。

    3) Sessionfind()方法返回的List集合中存放的都是持久化对象。

    4) Sessionupdate()saveOrUpdate()lock()方法使游离对象转变为持久化对象。

    5)当一个持久化对象关联一个临时对象,在允许级联保存的情况下,Session在清理缓存时会把这个临时对象也转变为持久化对象。

    3,脱管态:

    托管态:也叫做游离态或离线态,它是指持久态对象失去了与session的关联,托管态对象它存在OID,在数据库中有可能存在,

    也有可能不存在。对于托管态对象,它发生改变时hibernet不能检测到。

    三、持久化类三种状态切换

     

    1.瞬时态

    瞬时------>持久  save()   saveOrUpdate

    瞬时------>脱管(游离)     手动设置oid

    2..持久态   它是由session管理

    持久------>瞬时   delete() 被删除后持久化对象不在建议使用

    持久------>脱管   注意:session它的缓存就是所说的一级缓存

      evict(清除一级缓存 中指定的一个对象)

      clear(清空一级缓存)

      close(关闭,清空一级缓存)

    3..脱管态   (它是无法直接获取)

    脱管----->瞬时    直接将oid删除

    脱管----->持久   update()  saveOrUpdate() lock(过时)

  • 相关阅读:
    数据结构 图的接口定义与实现分析(超详细注解)
    数据结构-优先队列 接口定义与实现分析
    什么是梯度?
    javascript当中火狐的firebug如何单步调试程序?
    给出一个javascript的Helloworld例子
    lvs dr 模型配置详解
    数据库连接池
    JDBC事务管理
    JDBC工具类:JDBCUtils
    详解JDBC对象
  • 原文地址:https://www.cnblogs.com/blogslee/p/6740533.html
Copyright © 2020-2023  润新知