Hibernate之持久化对象
时间:2017-1-19 23:00
——Hibernate持久化类的状态
1、持久化类:就是一个实体类与数据库建立了映射。
2、Hibernate为了方便管理持久化类,将持久化类分为了三种状态:
1)瞬时态:transient(临时态)
2)持久态:persistent
3)脱管态:detached(离线态)
——三种持久化对象的状态
1、三种持久化对象的状态
1)瞬时态
不存在持久化标识OID,尚未与Hibernate Session关联对象,被认为处于瞬时状态,失去引用将被JVM回收。
无持久化标识OID,未与Session关联。
2)持久态
存在持久化标识OID,与当前Session有关联,并且关联的Session没有关闭,事务未提交。
存在持久化标识OID,与Session关联。
持久化对象有自动更新数据库的能力。
3)脱管态
存在持久化OID,但没有与当前Session关联,脱管状态改变时Hibernate无法检测。
存在持久化标识OID,未与Session关联。
2、区分三种持久化对象的状态
示例代码:
3、三种状态对象的转换
瞬时态:
Book book = new Book();
1)瞬时态 ——> 持久态
Book book = new Book();
session.save(book);
2)瞬时态 ——> 脱管态
book.setId(1); // 设置OID
持久态:
Book book = (Book)session.get(Book.class, 1);
get() / load() / find() iterate()
1)持久态 ——> 瞬时态
session.delete(book); // 删掉之后就没有OID了
2)持久态 ——> 脱管态
session.close()
clear() / evict(book) 将Session中的指定对象删除。
脱管态:
Book book = new Book();
book.setId(1);
1)脱管 ——> 持久
session.update(book);
2)脱管 ——> 瞬时
book.setId(null);
——持久态对象自动更新数据库
示例代码:
——总结
1、Hibernate持久化对象的状态:
* 瞬时态
没有唯一标识OID,没有与Session关联
* 持久态
有唯一标识OID,与Session关联
* 脱管态
有唯一标识OID,没有与Session关联
2、瞬时态对象
User user = new User()
瞬时态-->持久态
session.save(user)
瞬时态-->脱管态
user.setId(1)
3、持久态对象
get() / load()
持久态-->瞬时态
session.delete(Object)
持久态-->脱管态
session.close() / session.clear() / session.evice()
4、脱管态
User user = new User();
user.setId(1)
脱管态-->瞬时态
user.setId(null)
脱管态-->持久态
save() / saveOrUpdate()
Hibernate之持久化对象的更多相关文章
- hibernate中持久化对象的生命周期(三态:自由态,持久态,游离态 之间的转换)
三态的基本概念: 1, 暂时状态(Transient):也叫自由态,仅仅存在于内存中,而在数据库中没有对应数据.用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫暂时对象 ...
- hibernate中持久化对象的生命周期(转载)
三态的基本概念 1, 临时状态(Transient):也叫自由态,只存在于内存中,而在数据库中没有相应数据.用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象: 2 ...
- hibernate中持久化对象的状态
持久化对象有以下几种状态: 临时对象(Transient): 在使用代理主键的情况下, OID 通常为 null 不处于 Session 的缓存中 在数据库中没有对应的记录 持久化对象(也叫”托管 ...
- Hibernate -- 操作持久化对象
知识点2: session概述 Session 接口是 Hibernate 向应用程序提供的操纵对数据库的最主要的接口,它提供了基本的保存,更新, 删除和加载Java对象的方法. 知识点3:理解ses ...
- hibernate载入持久化对象的两种方式——get、load
一.get与load对照 在hibernate中get和load方法是依据id取得持久化对象的两种方法.但在实际使用的过程中总会把两者混淆,不知道什么情况下使用get好,什么时候使用load方法效率更 ...
- Hibernate的持久化对象
Hibernate的持久化类 什么是持久化类 1. 持久化类:就是一个Java类(咱们编写的JavaBean),这个Java类与表建立了映射关系就可以成为是持久化类. * ...
- 【Hibernate】持久化对象状态及以及缓存
一.持久化类状态 1.1 三种持久化对象的状态 1.2 区分三种状态 1.3 三种状态对象转换 1.瞬时态 2.持久态 3.脱管态 4.持久态对象有自动更新数据库的能力 一.持久化类状态 1.1 三种 ...
- Hibernate(二)持久化对象的状态
简介 以前学习Hibernate的笔记,整理一下便发出来了,防止弄丢.有错误的话麻烦各位留言评论,感激不尽. 持久化类 Hibernate完成了从面向对象模型表示的对象至关系模型表示的数据结构的映射, ...
- Hibernate的持久化对象配置
定义Pojo对象和**.hbm.xml文件 -1 对于每一个需要持久化的对象都需要创建一个Pojo类定义,Hibernate要求POJO类定义中必须有一个no-argument的构造方法,便于Hibe ...
随机推荐
- maven添加阿里云镜像
apache的maven服务器国内访问太慢了,用阿里的镜像会好很多. 1.maven的配置文件有两个,安装目录conf文件夹下settings.xml和用户目录.m2文件夹下的settings.xml ...
- Leetcode:面试题28. 对称的二叉树
Leetcode:面试题28. 对称的二叉树 Leetcode:面试题28. 对称的二叉树 Talk is cheap . Show me the code . /** * Definition fo ...
- spring @Primary-在spring中的使用(十九)
一.@Primary 在spring 中使用注解,常使用@Autowired, 默认是根据类型Type来自动注入的.但有些特殊情况,对同一个接口,可能会有几种不同的实现类,而默认只会采取其中一种的情况 ...
- HTMLTestRunner.py 文件,已修改完成
""" A TestRunner for use with the Python unit testing framework. It generates a HTML ...
- [BSidesCF 2020]Had a bad day 1--PHP伪协议
首先先打开主页,审查代码,并没有什么特别的地方使用dirsearch,发现flag.php-流程控制while
一.while循环介绍 while循环与for一样,一般不知道循环次数使用for,不知道循环的次数时推荐使用while 二.while语法 while [ condition ] #条件为真才会循环, ...
- nacos Failed to obtain JDBC Connection 连接异常
在conf/目录下,将application.properties.example 改名为bootstrap.properties 将连接数据库信息添加到末尾 # db mysql spring.da ...
- webrtc编译
webrtc编译 最近研究 libmediasoupclient,而 libmediasoupclient 又依赖 libwebrtc,所以首先就想着先在windows上编译一个webrtc的库,先是 ...
- 探索HashMap源码 一行一行解析 jdk1.7版本
今天我们来说一说,HashMap的源码到底是个什么? 面试大厂这方面一定会经常问到,很重要的.以jdk1.7 为标准 先带着大家过一遍 是由数组.链表组成 , 数组的优点是:每个元素有对应下标, ...
- C++ //虚析构和纯虚析构
1 //虚析构和纯虚析构 2 3 #include <iostream> 4 #include <string> 5 using namespace std; 6 7 clas ...