版权声明: https://blog.csdn.net/hu18315778112/article/details/84763653
使用Hibernate框架后,对数据库的操作已经不是开发人员书写的代码直接操作的了,而是通过操作实体对象的状态,然后框架内部的功能模块会根据实体对象的状态来执行响应的操作。
Hibernate框架中,实体对象的状态分为三种:
- 瞬时状态
- 持久化状态
- 游离/托管状态
瞬时状态是指实体对象内,没有id属性(主键属性为null),并且没有和session对象发生关联。(手动new出来的对象)
如:
Customer c=new Customer();
c.setCust_name("胡胡");
此时这个c虽然设置了name属性,但是没有设置主键对应的id属性,而且没有与Session对象没有任何联系,他就是瞬时状态的对象。
持久化状态:有主键id与session对象发生关联的实体对象
如:
如图可见,通过debug运行,程序执行完save方法,但事务还未提交,可以发现,并未手动设置主键,但是hibernate自动为c生成了主键值,此时c就从瞬时状态转化为了持久化状态。
持久化状态特点:对持久化状态对象的属性的操作,会在事务提交时,自动将数据同步到数据库,这个自动是hibernate框架帮助我们完成的。
所以我们使用hibernate框架的主要步骤就是:
- 开启事务——> 将对象转化为持久化状态(任意改变对象属性)——> 提交事务
游离/托管状态:对象有主键id,但是未与session关联
如:
Customer c=new Customer();
c.setCust_id(1l);此时,对象c手动设置了id,但是与session对象没有任何联系,则对象c为游离状态。
状态的转换
使用hibernate框架,要想实现数据库,最终就是要将对象状态转化为持久化状态
- 瞬时状态对象,通过session对象的save方法转化为持久化状态
- 游离状态对象,通过update方法转化为持久化状态
- 直接获得持久化状态对象,通过session对象的get / load方法获得持久化状态对象
拓展:持久化状态——>delete——>瞬时状态、持久化状态——>close——>游离状态