Hibernate的三种状态

1.瞬时状态(Transient)

   通过new创建对象后,对象并没有立刻持久化,他并未对数据库中的数据有任何的关联,此时java对象的状态为瞬时状态,Session对于瞬时状态的java对象是一无所知的,当对象不再被其他对象引用时,它的所有数据也就丢失了,对象将会被java虚拟机按照垃圾回收机制处理。

2.持久状态(Persistent)

  当对象与Session管理时,他就处于持久状态。处于持久状态的对象拥有数据库表示(数据库中的主键值)。

3.游离状态(Detached)

  处于持久状态的对象,脱离与其关联的Sessionn的管理后,对象就处于游离状态。

三种对象见的转换

使用new关键字构建的对象,该对象的状态就是瞬时状态

1.瞬时状态转为持久状态

  使用session对象的save()或者seavOrUpdate()方法保存对象后,该对象的状态由瞬时转换为持久状态。

  使用Session对象的get()或load()方法获取对象,该对象的状态是持久状态

2.持久状态转为瞬时状态

  执行Session对象的delete()方法后,对象由原来的持久状态变为瞬时状态,因为此时刻对象没有与任何的数据库数据关联。

3.持久状态转为游

  执行了Session对象的evict(),clear(),close()方法,对象由原来的持久状态转为游离状态;

4.游离状态转为持久状态

  重新获取Session对象,执行Session对象的update()或saveOrUpdate()方法,对象游离状态转为持久状态,该对象再次与session关联,

5.游离状态转为瞬时状态

  执行Session()对象的delete()方法时,对象由游离状态转为瞬时状态.

  处于瞬时状态或游离状态的对象不再被其他对象引用时,会被java虚拟机按照垃圾回收机制处理.

相关推荐
一只fish7 小时前
优化器架构对比:Oracle vs PostgreSQL vs MySQL
mysql·postgresql·oracle
极创信息7 小时前
系统安全隐患全方位排查方案:标准化渗透测试全流程
java·opencv·struts·数据挖掘·eclipse·语音识别·hibernate
测试运维日常笔记9 小时前
Oracle 数据库连接认证方式详解
数据库·oracle
盗理者11 小时前
AI Agent 技能分享|从零实现 MCP Server,让 Agent 安全读取数据库
数据库·oracle
oradh15 小时前
Oracle ADRCI 诊断数据工具总结
数据库·oracle·adrci
wear工程师16 小时前
Java 类初始化到底何时触发?别把加载、连接和 static 执行混在一起
java·jvm
xfhuangfu17 小时前
Oracle 19c 本地索引分区变为 UNUSABLE 后的空间占用验证
数据库·oracle
杨云龙UP17 小时前
Oracle ASH 报告详解:与 AWR 的区别、使用场景及生成方法
linux·运维·服务器·数据库·oracle
测试运维日常笔记17 小时前
PostgreSQL 数据库磁盘空间占用排查手顺
数据库·postgresql·oracle
程序员雷欧17 小时前
线上频繁触发各种 GC 的原因排查与处理指南
java·jvm·算法