一、持久化对象po类

1、po定义

  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构造方法

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

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

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

二、Hibernate持久化对象状态

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

1.瞬时态

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

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

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

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

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

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

2.持久态

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

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

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

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

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

4) Session的update()、saveOrUpdate()和lock()方法使游离对象转变为持久化对象。

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

3,脱管态:

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

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

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

1.瞬时态

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

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

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

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

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

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

clear(清空一级缓存)

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

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

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

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

1.1Hibernate持久化类和Hibernate持久化对象状态的更多相关文章

  1. HIbernate的对象状态

    *临时状态对象: session中没有缓存,且在数据库中没有对应数据. User user1=new User(null,"c50",18); *持久化状态对象: session中 ...

  2. Hibernate中持久化类与持久化对象

    1.JavaBean类 JavaBean类是实体类,必须一下属性,private修饰的成员属性,public修饰的getter与setter访问方法,public修饰的空参构造器,实现Serializ ...

  3. Hibernate的持久化类状态

    Hibernate的持久化类状态 持久化类:就是一个实体类 与 数据库表建立了映射. Hibernate为了方便管理持久化类,将持久化类分成了三种状态. 瞬时态 transient (临时态):持久化 ...

  4. 初识Hibernate之理解持久化类

         上一篇文章我们简单介绍了Hibernate相关的一些最基本的文件及其作用,并在最后完整的搭建了Hibernate的运行环境,成功的完成了与数据库的映射.但是至于其中的一些更加细节的地方并没有 ...

  5. Hibernate学习——持久化类的学习

    A.概念 持久化:将内存中的对象持久化(存储)到数据库的过程.Hibernate就是持久化的框架. 持久化类:一个普通java对象与数据库的表建立了映射关系,那么这个类在Hiberna中被称为持久化类 ...

  6. java框架之Hibernate(2)-持久化类&主键生成策略&缓存&事务&查询

    持久化类 概述 持久化:将内存中的对象持久化到数据库中的过程就是持久化.Hibernate 就是用来进行持久化的框架. 持久化类:一个 Java 对象与数据库的表建立了映射关系,那么这个类在 Hibe ...

  7. 三大框架 之 Hibernate生成策略与缓存策略(主键生成策略、持久化、持久化类划分、一级缓存、事物管理)

    目录 Hibernate生成策略与缓存策略 主键生成策略 主键分类 主键的生成策略 持久化 什么是持久化 什么是持久化类 持久化类编写规则 持久化类的划分 三种状态区分 持久态对象特征 一级缓存 什么 ...

  8. 【Hibernate】持久化对象状态及以及缓存

    一.持久化类状态 1.1 三种持久化对象的状态 1.2 区分三种状态 1.3 三种状态对象转换 1.瞬时态 2.持久态 3.脱管态 4.持久态对象有自动更新数据库的能力 一.持久化类状态 1.1 三种 ...

  9. 三、hibernate中持久化类的使用

    hibernate的持久化类 持久化:将内存中的一个对象持久化到数据库中的过程,hibernate就是一个用来进行持久化的框架 持久化类:一个Java对象与数据库中表建立了关系映射,那么这个类在hib ...

随机推荐

  1. MySQL查询语句的45道练习

              一.设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表(四) ...

  2. #include<bits/stdc++.h>

    在听学长讲课时看到了#include<bits/stdc++.h>这个头文件,瞬间懵逼辣,百度后了解了 #include<bits/stdc++.h>,包含了C++的所有头文件 ...

  3. springmvc基础学习3---注解简单理解

    1:@Controller 用来注解这个bean是MVC模型中的一个C 会被spring的auto-scan扫到纳入管理.Spring mvc框架中的action层注入,也就是控制层.控制器Contr ...

  4. Linux学习之Vim使用

    一 为何要学Vim 所有的Unix Like系统都有自带vi编辑器 一些软件的编辑接口会自动调起vi 作为vi的升级版,vim具有程序编辑功能,而且具有代码颜色高亮显示.辨别代码的正确性等功能 以上优 ...

  5. Storm(2015.08.12笔记)

    2015.08.12Storm   一.Storm简介 Storm是Twitter开源的一个类似于Hadoop的实时数据处理框架.   Storm能实现高频数据和大规模数据的实时处理. 官网资料显示s ...

  6. Centos7忘记密码

    CentOS 7 root密码的重置方式和CentOS 6完全不一样,CentOS 7与之前的版本6变化还是比较大的,以进入单用户模式修改root密码为例. 1.重启开机按esc 2.按e 3.编辑修 ...

  7. pg_config executable not found

    Error: pg_config executable not found. Please add the directory containing pg_config to the PATH or ...

  8. 关于oracle后导数据的一些小TIPS

    今天下午需要把一些数据导入到正式环境中,但是通过Excel拷贝进去行会错位,把excel的每一列的双击让其变为最宽即可解决该问题

  9. js数组的几个练习题

    第一次在博客园写文章,之前一直自己做记录.现在前端工作两年了,对前端整体技术有较清晰的了解.项目用了vue,react之类的写,如今打算从基础开始,慢慢深入了解原生的JS.这几天清明节,玩的嗨皮,最后 ...

  10. JAVA加密算法系列-AesEBC

    package ***; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java. ...