Hibernate中持久化类的三种状态

Hibernate框架将持久化类分为瞬时态、持久态和托管态三种状态。瞬时态对象由new创建,无持久标识,未关联Session。持久态对象有OID,已加入Session并关联数据库记录。托管态对象在Session关闭后与Session失去关联,但仍有OID。状态间的转换包括:瞬时态->持久态(save或saveOrUpdate)、瞬时态->托管态(设置OID)、持久态->瞬时态(delete)、持久态->托管态(Session关闭)、托管态->持久态(update或saveOrUpdate)、托管态->瞬时态(OID设为null)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

持久化类的三种状态

Hibernate是持久层框架,通过持久化类完成ORM操作。

为了更好的管理持久类,将持久类分为三种状态:
瞬时态,持久态,托管态。


1、瞬时态(transient)

瞬时态也被称为临时态或者自由态,瞬时态的实现是由new命令创建,开辟内存空间的对象。不存在持久标识OID(相当于主键),尚未与Hibernate Session关联,在数据库中也没有记录,失去引用后将被JVM回收。

瞬时态的对象在内存中是孤立存在的,与数据库中的数据无任何关联,仅是一个信息携带的载体。

瞬时态对象:不存在OID,没有与Session关联。


2、持久态(persistent)

持久态的对象存在持久标识OID,加入到了Session缓存中,并且相关联的Session没有关闭,在数据库中有对应的记录,每条记录只对应唯一的持久化对象。

需要注意的是,持久化对象是在事务还未提交前,就已经变成持久态的了。

持久态对象:存在OID,与Session有关联,并且Session没有关闭。


3、托管态(detached)

托管态也被称为离线态或者游离态,当某个持久化状态的实例与Session的关联被关闭时,就变成了托管态。

托管态对象存在持久化表示OID,并且仍然与数据库表中数据存在关联,只是失去了与当前Session的关联,托管状态的对象发生改变时,Hibernate不能检测到。

托管态对象:存在OID,Session关闭后,失去关联。


4、如何区分持久化类对象的三种状态?

测试代码:

package com.pipi.hibernate02;

import com.pipi.hibernate.User;
import myutils.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Transaction;

import java.io.Serializable;

// 持久类的三种状态:瞬时态,持久态,托管态。
public class Test01 {
   
   
    public static 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值