1.1Hibernate持久化类和Hibernate持久化对象状态
一、持久化对象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持久化对象状态的更多相关文章
- HIbernate的对象状态
*临时状态对象: session中没有缓存,且在数据库中没有对应数据. User user1=new User(null,"c50",18); *持久化状态对象: session中 ...
- Hibernate中持久化类与持久化对象
1.JavaBean类 JavaBean类是实体类,必须一下属性,private修饰的成员属性,public修饰的getter与setter访问方法,public修饰的空参构造器,实现Serializ ...
- Hibernate的持久化类状态
Hibernate的持久化类状态 持久化类:就是一个实体类 与 数据库表建立了映射. Hibernate为了方便管理持久化类,将持久化类分成了三种状态. 瞬时态 transient (临时态):持久化 ...
- 初识Hibernate之理解持久化类
上一篇文章我们简单介绍了Hibernate相关的一些最基本的文件及其作用,并在最后完整的搭建了Hibernate的运行环境,成功的完成了与数据库的映射.但是至于其中的一些更加细节的地方并没有 ...
- Hibernate学习——持久化类的学习
A.概念 持久化:将内存中的对象持久化(存储)到数据库的过程.Hibernate就是持久化的框架. 持久化类:一个普通java对象与数据库的表建立了映射关系,那么这个类在Hiberna中被称为持久化类 ...
- java框架之Hibernate(2)-持久化类&主键生成策略&缓存&事务&查询
持久化类 概述 持久化:将内存中的对象持久化到数据库中的过程就是持久化.Hibernate 就是用来进行持久化的框架. 持久化类:一个 Java 对象与数据库的表建立了映射关系,那么这个类在 Hibe ...
- 三大框架 之 Hibernate生成策略与缓存策略(主键生成策略、持久化、持久化类划分、一级缓存、事物管理)
目录 Hibernate生成策略与缓存策略 主键生成策略 主键分类 主键的生成策略 持久化 什么是持久化 什么是持久化类 持久化类编写规则 持久化类的划分 三种状态区分 持久态对象特征 一级缓存 什么 ...
- 【Hibernate】持久化对象状态及以及缓存
一.持久化类状态 1.1 三种持久化对象的状态 1.2 区分三种状态 1.3 三种状态对象转换 1.瞬时态 2.持久态 3.脱管态 4.持久态对象有自动更新数据库的能力 一.持久化类状态 1.1 三种 ...
- 三、hibernate中持久化类的使用
hibernate的持久化类 持久化:将内存中的一个对象持久化到数据库中的过程,hibernate就是一个用来进行持久化的框架 持久化类:一个Java对象与数据库中表建立了关系映射,那么这个类在hib ...
随机推荐
- 使用spring webflow,在前台页面中如何显示后端返回的错误信息
刚刚接触spring webflow,相关的资料并不是很多,并且大都是那种入门的 .xml文件的配置. 用到的CAS 最新的4.0版本用的就是web-flow流,前台页面使用的是表单提交.于是我就碰到 ...
- js模块化加载器实现
背景 自es6以前,JavaScript是天生模块化缺失的,即缺少类似后端语言的class, 作用域也只以函数作为区分.这与早期js的语言定位有关, 作为一个只需要在网页中嵌入几十上百行代码来实现一些 ...
- ORACLE获取表信息方法
获取表: select table_name from user_tables; //当前用户的表 select table_name from all_tables; //所有用户的表 select ...
- 深入浅出数据结构C语言版(3)——递归简论
相信学习过C语言的读者都已经接触过递归(不论是谭浩强的C程序设计还是C Primer Plus都有递归程序),本文就是对递归的基本原则进行简要介绍.首先,我们写一个基本的递归函数作为例子: int ...
- 【子非鱼】归并排序过程呈现之java内置GUI表示
在网上看到一个视频将各种排序用视频表示出来,配上音乐,挺好玩的样子,就算是不会编程的人看到也会觉得很舒服,碰巧我也正在写归并算法,于是就用java的GUI实现一个. 归并排序的时间复杂度是T(n)=O ...
- 【Yii系列】处理请求
缘起 这一章是Yii系列的第三章,前两章给大伙讲解了Yii2.0的安装与Yii2.0的基本框架及基础概念,传送门: [Yii2.0的安装与调试]:http://www.cnblogs.com/rive ...
- 【C语言】两种方式实现冒泡排序算法
题目要求 编写一个C语言程序,实现基本的冒泡排序算法. 算法 冒泡排序,用一句话来总结: 一组数中,相邻的两个数进行比较.交换,将最大(小)数交换至尾(首)部,即完成了一次冒泡排序 要想对N个数字进行 ...
- CodeFirst的一些操作!!
CodeFirst的一些操作!! 转载 2016-08-05 21:03:32 1 首先是codefirst怎么做,这个首先肯定要引入EntityFramework,然后在model中创建实体类,例如 ...
- Uva 679 Dropping Balls (模拟/二叉树的编号)
题意:有一颗二叉树,深度为D,所有节点从上到下从左到右编号为1,2,3.....在结点一处放一个小球,每个节点是一个开关,初始全是关闭的,小球从顶点落下,小球每次经过开关就会把它的状态置反,现在问第k ...
- Mybatis基础学习(一)—初识MyBatis
一.MyBatis是什么? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google co ...