hibernate中的PO持久化对象及PO三种状态
2015-11-05 21:05
274 查看
一,认识持久化对象PO:
在hibernate的应用程序中,每一个数据库中的表都对应一个持久化对象PO。PO可以看成是与数据库表相映射的java对象。最简单的PO对应数据库中某个表中的一条记录,多个记录可以对应PO的一个集合。
PO类即持久化类,其实就是一个普通的JavaBean,只是要申明遵循一定的规则就是一个PO。
1,为持久化字段声明私有属性且提供getter和setter方法
2,实现一个无参构造函数。所有的持久化类都要有一个默认的构造函数,这样hibernate就可以使用newInstance()来实例化它们。
3,提供一个标识符属性。
标识符属性,用于映射数据库表的主键字段。这个属性可以叫任何名字,其类型可以试任何原始类型,原始类型的包装类型,String或者Date。
二,持久化对象的三种状态:
Hibernate的PO对象有三种状态:临时状态,持久状态,脱管状态。
1,临时态
由new命令开辟内存空间刚生成的Java对象就处于临时态。例如:UserInfoPO ui=new UserInfoPO();如果没有变量引用,他讲被java虚拟机回收。
临时对象在内存中是孤立存在的,它是携带信息的载体,不和数据库的数据有任何关联关系。在Hibernate中,可通过Session的save()或saveOrUpdate()方法将临时对象与数据库相关联,并将数据插入到数据库中,此时该临时对象状变成持久化对象。
临时对象的特征。临时对象具有以下特征:
(1) 不处于Session的缓存中,也可以说,不被任何一个Session实例关联。
(2) 在数据库中没有对应的记录。
(3)他们没有任何跟数据库表相关联的行为
在以下情况下,Java对象进入临时状态:
(1) 当通过new语句刚创建了一个Java对象,它处于临时状态,此时不和数据库中的任何记录对应。
(2) Session的delete()方法能使一个持久化对象或游离对象转变为临时对象。对于游离对象,delete()方法从数据库中删除与它对应的记录;对于持久化对象,delete()方法从数据库中删除与它对应的记录,并且把它从Session的缓存中删除。
2,持久态
处于该状态的对象在数据库中具有对应的记录,并拥有一个持久化标志。如果使用delete方法。对应的持久化对象就会变成临时对象。因为数据库中对应的数据已被删除,该对象不在与数据库的记录相关联。
当session执行close()和clear()之后,持久对象变成脱管对象,此时持久对象会变成脱管对象,此时该对象有数据库识别值,但不在hibernate持久层管理之下。
持久对象具有如下特点:
1)和session实例关联,位于一个Session实例的缓存中
2)在数据库中有关联记录。
Session的许多方法都能够触发Java对象进入持久化状态:
(1) Session的save()方法把临时对象转变为持久化对象。
(2) Session的load()或get()方法返回的对象总是处于持久化状态。
(3) Session的find()方法返回的List集合中存放的都是持久化对象。
(4) Session的update()、saveOrUpdate()和lock()方法使游离对象转变为持久化对象。
(5)当一个持久化对象关联一个临时对象,在允许级联保存的情况下,Session在清理缓存时会把这个临时对象也转变为持久化对象。
3,脱管态:
某持久化对象的session被关闭后,持久化对象就变成了脱管对象,这个对象不能再与数据库保持同步,他们不再受Hibernate管理。当脱管对象被重新关联上Session时,将再次转变成持久化对象。
脱管对象有如下特点:
1)不再位于Session的缓存中
2),因此在数据库中可能还存在与它对应的记录(前提条件是没有其他程序删除了这条记录)。
脱管对象与临时对象的相同之处:
两者都不被Session关联,因此Hibernate不会保证它们的属性变化与数据库保持同步。
脱管对象与临时对象的区别:
前者是由持久化对象转变过来的,因此可能在数据库中还存在对应的记录,而后者在数据库中没有对应的记录
当调用Session的close()方法时,Session的缓存被清空,缓存中的所有持久化对象都变为游离对象。如果在应用程序中没有引用变量引用这些游离对象,它们就会结束生命周期。
总结:
临时对象-----(get,load等)------>持久对象------(close方法关闭session)------>脱管对象
临时对象:不在session缓存,没记录,get,load转变持久对象
持久对象:在session缓存,有记录
脱管对象:不在session缓存,可能有记录,有数据库标识,可通过update,saveOrUpdate等,转变持久对象。
在hibernate的应用程序中,每一个数据库中的表都对应一个持久化对象PO。PO可以看成是与数据库表相映射的java对象。最简单的PO对应数据库中某个表中的一条记录,多个记录可以对应PO的一个集合。
PO类即持久化类,其实就是一个普通的JavaBean,只是要申明遵循一定的规则就是一个PO。
package PO; public class UserInfoPO { private int id; private String username; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }定义PO遵循以下三个原则:
1,为持久化字段声明私有属性且提供getter和setter方法
2,实现一个无参构造函数。所有的持久化类都要有一个默认的构造函数,这样hibernate就可以使用newInstance()来实例化它们。
3,提供一个标识符属性。
标识符属性,用于映射数据库表的主键字段。这个属性可以叫任何名字,其类型可以试任何原始类型,原始类型的包装类型,String或者Date。
二,持久化对象的三种状态:
Hibernate的PO对象有三种状态:临时状态,持久状态,脱管状态。
1,临时态
由new命令开辟内存空间刚生成的Java对象就处于临时态。例如:UserInfoPO ui=new UserInfoPO();如果没有变量引用,他讲被java虚拟机回收。
临时对象在内存中是孤立存在的,它是携带信息的载体,不和数据库的数据有任何关联关系。在Hibernate中,可通过Session的save()或saveOrUpdate()方法将临时对象与数据库相关联,并将数据插入到数据库中,此时该临时对象状变成持久化对象。
临时对象的特征。临时对象具有以下特征:
(1) 不处于Session的缓存中,也可以说,不被任何一个Session实例关联。
(2) 在数据库中没有对应的记录。
(3)他们没有任何跟数据库表相关联的行为
在以下情况下,Java对象进入临时状态:
(1) 当通过new语句刚创建了一个Java对象,它处于临时状态,此时不和数据库中的任何记录对应。
(2) Session的delete()方法能使一个持久化对象或游离对象转变为临时对象。对于游离对象,delete()方法从数据库中删除与它对应的记录;对于持久化对象,delete()方法从数据库中删除与它对应的记录,并且把它从Session的缓存中删除。
2,持久态
处于该状态的对象在数据库中具有对应的记录,并拥有一个持久化标志。如果使用delete方法。对应的持久化对象就会变成临时对象。因为数据库中对应的数据已被删除,该对象不在与数据库的记录相关联。
当session执行close()和clear()之后,持久对象变成脱管对象,此时持久对象会变成脱管对象,此时该对象有数据库识别值,但不在hibernate持久层管理之下。
持久对象具有如下特点:
1)和session实例关联,位于一个Session实例的缓存中
2)在数据库中有关联记录。
Session的许多方法都能够触发Java对象进入持久化状态:
(1) Session的save()方法把临时对象转变为持久化对象。
(2) Session的load()或get()方法返回的对象总是处于持久化状态。
(3) Session的find()方法返回的List集合中存放的都是持久化对象。
(4) Session的update()、saveOrUpdate()和lock()方法使游离对象转变为持久化对象。
(5)当一个持久化对象关联一个临时对象,在允许级联保存的情况下,Session在清理缓存时会把这个临时对象也转变为持久化对象。
3,脱管态:
某持久化对象的session被关闭后,持久化对象就变成了脱管对象,这个对象不能再与数据库保持同步,他们不再受Hibernate管理。当脱管对象被重新关联上Session时,将再次转变成持久化对象。
脱管对象有如下特点:
1)不再位于Session的缓存中
2),因此在数据库中可能还存在与它对应的记录(前提条件是没有其他程序删除了这条记录)。
脱管对象与临时对象的相同之处:
两者都不被Session关联,因此Hibernate不会保证它们的属性变化与数据库保持同步。
脱管对象与临时对象的区别:
前者是由持久化对象转变过来的,因此可能在数据库中还存在对应的记录,而后者在数据库中没有对应的记录
当调用Session的close()方法时,Session的缓存被清空,缓存中的所有持久化对象都变为游离对象。如果在应用程序中没有引用变量引用这些游离对象,它们就会结束生命周期。
总结:
临时对象-----(get,load等)------>持久对象------(close方法关闭session)------>脱管对象
临时对象:不在session缓存,没记录,get,load转变持久对象
持久对象:在session缓存,有记录
脱管对象:不在session缓存,可能有记录,有数据库标识,可通过update,saveOrUpdate等,转变持久对象。
相关文章推荐
- PPPOE的技术介绍
- 各种概念POJO、JAVABEAN、DAO、DTO、PO、VO、BO、SSH、EJB
- PO and POJO
- PO BO VO DTO POJO DAO概念
- Buffer Cache Pool
- Oracle EBS PO API po_change_api1_s.update_po修改PO行信息
- 使用HttpUrlConnection执行Post请求,出现EOFException
- Hibernate中的对象有三种状态: 瞬时状态 (Transient),持久状态 (Persistent),
- java的(PO,VO,TO,BO,DAO,POJO)解释
- 根据URL地址获取网页信息(GET/POST)
- hibernate 深入理解持久化对象
- 敏捷开发学习分享
- Java中的各种bean对应的意义(VO,PO,BO,QO, DAO,POJO,DTO)
- ME21N/ME22N/ME23N屏幕增强BADI ME_GUI_PO_CUST
- BAPI调用 - BAPI_PO_CREATE1手动指定行项目编号方法介绍
- 未清采购订单
- Xcode断点调试,po 报错
- POJ1981Circle and Points【单位圆能覆盖的最多点】
- xcode之debugger
- PO VO DAO DTO BO TO概念与区别