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 ...
随机推荐
- python + selenium <一>
python 安装 python 下载地址: http://python.org/getit/ ez_setup.py 下载地址: https://pypi.python.org/packages/s ...
- css基础学习---简单理解
1:在css中定义图片相对路径 #primary-nav { //相对路径 background: url(../images/alert-overlay.png) repeat-x; height: ...
- ng-class 用法
很长时间不写页面很多angualrjs的指令用法忘了,搜搜网上的千篇一律“不全”: 下面我把ngclass的用法列出来!(注:网上只有2种,我补充一种三维运算) 1: ng-class=" ...
- 百度推出 MIP Shell 链接
在站长将站点 MIP 化时,需要关注 URL 的一共有三个:MIP URL, MIP-Cache URL 以及 MIP-Shell URL. 从 URL 说起 在互联网中,URL 定义页面的地址,每个 ...
- 深入浅出数据结构C语言版(5)——链表的操作
上一次我们从什么是表一直讲到了链表该怎么实现的想法上:http://www.cnblogs.com/mm93/p/6574912.html 而这一次我们就要实现所说的承诺,即实现链表应有的操作(至于游 ...
- ASP.NET Core MVC之ViewComponents(视图组件)
前言 大概一个来星期未更新博客了,久违了各位,关于SQL Server性能优化会和ASP.NET Core MVC穿插来讲,如果你希望我分享哪些内容可以在评论下方提出来,我会筛选并看看技术文档来对你的 ...
- 纯Jquery前端分页
---恢复内容开始--- 由于之前自己做过jquery分页,就是调用jni接口时,只能用前台分页解决显示问题.最近看到有人提这样的问题:一个请求传过来上万个数据怎么办?于是萌生了写这篇博客的想法. 效 ...
- HTML Socket实现 .NET
HTML5 拥有许多引人注目的新特性,如 Canvas.本地存储.多媒体编程接口.WebSocket 等等.虽然现在大家把它捧的很火的样子,但是个人认为它还需要其他平台的支持才能真正的"火起 ...
- JavaEE开发之Spring中Bean的作用域、Init和Destroy方法以及Spring-EL表达式
上篇博客我们聊了<JavaEE开发之Spring中的依赖注入以及AOP>,本篇博客我们就来聊一下Spring框架中的Bean的作用域以及Bean的Init和Destroy方法,然后在聊一下 ...
- Meta http-equiv属性详解
http-equiv顾名思义,相当于http的文件头作用,它可以向浏览器传回一些有用的信息,以帮助正确和精确地显示网页内容,与之对应的属性值为content,content中的内容其实就是各个参数的变 ...