Hibernate之hibernate中java对象的状态
2016-02-18 11:50
363 查看
只有清楚Hibernate中java对象的状态,以及对象之间的转换点,才能更好的操作对象。
1.Hibernate中java对象有3种状态:
(1)临时状态(transient)
刚刚通过关键字new创建出来,还没有被持久化,没有处于Session缓存中。
(2)持久化状态(persistent)
已经被持久化,放入Session缓存中的状态。
(3)游离状态(detached)
已经被持久化,但是不在Session缓存中。
状态变化实例:
![](http://img.blog.csdn.net/20160218103541733?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
以上三种状态动态行为都是参考Session,以下为状态转换动态转换图:
![](http://img.blog.csdn.net/20160218105245270?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2.Hibernate不同状态的特征
(1)临时态特征
不处于Session缓存中;
没有持久化,数据库中没有记录;
从以上流程图可以看出,在以下三种情况下,对象进入临时态:
1.刚new出来,没有被持久化
2.从数据库中删除对应记录,同时从Session中
3.将游离态对象删除从数据库中删除对应记录
(2)持久态特征
在Session缓存中;
持久化对象与数据库中相应记录对应;
Session有很多方法可以让不同状态对象进入持久化状态,从以上流程图,可以看出常用如下:
1.save()或saveOrUpdate()把临时态转换为持久态,也可把游离态转换为持久态。
2.Session的load()或get()返回对象处于持久态。
(3)游离态特征
不在Session缓存中,即不在被Session关联;
由持久化对象转换而来,数据库中可能存在对应记录,如果数据库对应记录没有被删除的情况下。
从转换图可以知道,Session的以下方法会使持久化对象转换为游离态对象:
close(),evict(),clear()
注意:临时态与游离态的区别:临时态没有被持久化,数据库中绝对不会有对应记录,而有离态由持久化变化而来,数据库记录没被删除的情况下,数据库可能存在游离态对应的记录,这是两者的根本区别。
1.Hibernate中java对象有3种状态:
(1)临时状态(transient)
刚刚通过关键字new创建出来,还没有被持久化,没有处于Session缓存中。
(2)持久化状态(persistent)
已经被持久化,放入Session缓存中的状态。
(3)游离状态(detached)
已经被持久化,但是不在Session缓存中。
状态变化实例:
以上三种状态动态行为都是参考Session,以下为状态转换动态转换图:
2.Hibernate不同状态的特征
(1)临时态特征
不处于Session缓存中;
没有持久化,数据库中没有记录;
从以上流程图可以看出,在以下三种情况下,对象进入临时态:
1.刚new出来,没有被持久化
2.从数据库中删除对应记录,同时从Session中
3.将游离态对象删除从数据库中删除对应记录
(2)持久态特征
在Session缓存中;
持久化对象与数据库中相应记录对应;
Session有很多方法可以让不同状态对象进入持久化状态,从以上流程图,可以看出常用如下:
1.save()或saveOrUpdate()把临时态转换为持久态,也可把游离态转换为持久态。
2.Session的load()或get()返回对象处于持久态。
(3)游离态特征
不在Session缓存中,即不在被Session关联;
由持久化对象转换而来,数据库中可能存在对应记录,如果数据库对应记录没有被删除的情况下。
从转换图可以知道,Session的以下方法会使持久化对象转换为游离态对象:
close(),evict(),clear()
注意:临时态与游离态的区别:临时态没有被持久化,数据库中绝对不会有对应记录,而有离态由持久化变化而来,数据库记录没被删除的情况下,数据库可能存在游离态对应的记录,这是两者的根本区别。
相关文章推荐
- struts 2 的SessionAware接口使用
- spring整理学习
- Java类加载过程(2)
- 【持久层】java程序猿的JDBC知识点
- JAVA 字节流和字符流度读写的区别
- 使用Spring MVC HandlerExceptionResolver处理异常
- Java线程等待wait通知notify方法的使用
- 对Java Serializable(序列化)的理解
- 深入Java虚拟机(1)——Java体系结构
- 深入Java虚拟机(1)——Java体系结构
- 深入Java虚拟机(1)——Java体系结构
- java处理html空格变成问号问题
- 深入Java虚拟机(1)——Java体系结构
- jdk环境变量
- java产生六位数字验证码
- JAVA中类型转换
- struts2的总体回想(ACTION、拦截器、值栈、OGNL表达式、ModelDriven方案等)
- java多线程学习笔记
- JAVA字符串格式化-String.format()的使用
- eclipse下搭建Kotlin开发环境