hibernate学习——实体对象状态(瞬时、持久化、游离)

版权声明: 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——>游离状态

猜你喜欢

转载自blog.csdn.net/hu18315778112/article/details/84763653