一、持久化对象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. 2017-3-18 SQL server 数据库 45道题

    use data02161212 create table student (Sno nvarchar(3) primary key, Sname nvarchar(8) not null, Ssex ...

  2. Bootstrap 组件之 Navbar

    一.简介 Navbar 指导航条,它在移动设备上显示为折叠状态,在宽屏幕上水平展开.这里 是一个线上例子. 响应式导航条依赖 collapse 插件,定制 Bootstrap 时务必要包含. {设备的 ...

  3. 微信JS初始化--微信JS系列文章(一)

    概述 微信JS的使用方法,官方文档已经描述得比较清楚了,这里我就不重复介绍了,本文意在提供现成的代码,供大家快速迭代开发,以及补充一下官方文档描述得不够清楚的地方,避免大家踩相同的坑. 微信JS初始化 ...

  4. python3.6 简单爬虫

    # coding='UTF-8' from bs4 import BeautifulSoup # 引入beautifulsoup 解析html事半功倍 import re import urllib ...

  5. 一行命令创建 http-server

    一行命令启动http-server总结:1. python2.xpython2 -m SimpleHTTPServer 8000 2. python3.xpython -m http.server 8 ...

  6. git工具使用方法及常用命令

    git下载地址:https://git-for-windows.github.io/git环境变量配置:增加:GIT_HOME = C:\Git (文件夹为git软件的安装文件夹)Path添加: %G ...

  7. css2.1实现圆角边框

    虽然css3的border-radius实现圆角很简单,但是我还是认为css2.1中好多技术还是很值得学习的,我也是后来才知道这就是传说中的滑动门技术.脑洞大开啊 附上demo <!DOCTYP ...

  8. 深入hibernate的三种状态

    学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别 ...

  9. Access SQL实现连续及不连续Rank排名

    一.关于起因 在Excel中我们经常使用Rank函数对数据进行排名操作.而在Access中我们要进行排名是找不到这个Rank函数的,此时我们需要自己书写VBA代码或者建立SQL查询来完成排序操作. 今 ...

  10. 翻译一篇文章:It's Difficult to Grow a Test Developer(成为测试开发工程师的艰辛)

    翻译一篇文章:It's Difficult to Grow a Test Developer(成为测试开发工程师的艰辛)   以下文章是送给来poptest学习测试开发工程师的学员们,很多人想测试工程 ...