问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Hibernate 的三种状态 持久化 游离 临时 的关系

发布网友 发布时间:2022-04-13 21:20

我来回答

1个回答

热心网友 时间:2022-04-13 22:49

临时(Transient) - 由new操作符创建,且尚未与Hibernate Session 关联的对象被认定为临时(Transient)的。临时(Transient)对象不会被持久化到数据库中,也不会被赋予持久化标识(identifier)。 如果临时(Transient)对象在程序中没有被引用,它会被垃圾回收器(garbage collector)销毁。 使用Hibernate Session可以将其变为持久(Persistent)状态。(Hibernate会自动执行必要的SQL语句)

持久(Persistent) - 持久(Persistent)的实例在数据库中有对应的记录,并拥有一个持久化标识(identifier)。 持久(Persistent)的实例可能是刚被保存的,或刚被加载的,无论哪一种,按定义,它存在于相关联的Session作用范围内。 Hibernate会检测到处于持久(Persistent)状态的对象的任何改动,在当前操作单元(unit of work)执行完毕时将对象数据(state)与数据库同步(synchronize)。 开发者不需要手动执行UPDATE。将对象从持久(Persistent)状态变成瞬时(Transient)状态同样也不需要手动执行DELETE语句。

游离(Detached) - 与持久(Persistent)对象关联的Session被关闭后,对象就变为游离(Detached)的。 对游离(Detached)对象的引用依然有效,对象可继续被修改。游离(Detached)对象如果重新关联到某个新的Session上, 会再次转变为持久(Persistent)的(在Detached其间的改动将被持久化到数据库)。 这个功能使得一种编程模型,即中间会给用户思考时间(user think-time)的长时间运行的操作单元(unit of work)的编程模型成为可能。 我们称之为应用程序事务,即从用户观点看是一个操作单元(unit of work)。
Hibernate中对象的游离状态是指Session关闭之后,持久化对象变成离线对象,离线对象就不能同数据库同步,也不再受Hibernate管理。操作 处于游离态对象 经常会报 session已关闭的错误。

举例
有两个类, Team, Person. 映射关系是Team一对多Person, 采用lazy fetch策略。
session begin
Team t = *Dao.get()
session end
t.getPersons()// 出错
如果是用spring管理session的情况,事务外操作t.getPerons()也跟上面情况一样。
这种情况在生产环境多表现为在jsp页面操作 t对象时出错。
解决方法:
1. 取消lazy fetch策略
缺点:会导致过多的数据库访问,因为是一对多的情况。
2. 在事务内就先把关联的对象取出
缺点:会导致service层方法不统一,因为要分开取出与不取出的情况。
3. 使用spring的 openSessionInview机制
缺点: session打开的时间比较长, 使用不好可能会导致out of memory

一个游离态的对象转换为持久战态,有以下几种方法:
1、session.saveOrUpdate(object)。这语句会把游离态的PO转为持久态的PO并提交给数据库
2、session.merge(object)。这语句会把游离态的PO转为持久态的PO,并进行合并操作。
3、session.lock(object, LockMode.NONE)。这语句只会把游离态的PO转为持久态PO,不作其他操作。不过,PO必须是没有修改过的,这方法挺适合做一个应用层。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
谁告诉我一下,韩语中,“遵命”怎么说 想开个甜品店,不知道哪里可以学习呢 如何取消微信新号绑定的手机号? 翼支付-翼建钟情活动内容是什么? 怎么参加翼支付“翼建钟情”活动? 翼支付--翼建钟情立减10元-建行这次活动有具体名额限制吗? 西凤酒是哪里的 货车总重量不超过二十吨就不算超载吗? 自卸货车上装有二十多吨货已经有四五天了对货车能伤害哪个部位? 如何回复别人的"忙里偷闲"? 找一部好莱坞电影叫怒什么的四个字的? 欧美电影动作片四个字的,叫古什么的? 企业怎么申请流程 捷信办贷款不需要工作证明和流水就能贷下来钱吗 在捷信申请现金贷款一般几天到 今天星期天 我想问一下,捷信办理的现金贷款 说2~3个工作日可以到账是指办理之日起2~3天 还是放款后2~3天 在捷信办的现金贷款 昨天下午一点已经放款 今天可以到吗 捷信贷款 直接在网上办了就可以到帐吗? 把这句话翻译成日语,“你是我唯一的失算” 捷信今天办的五千现金贷款,明天能到账吗? 企业申请流程怎么注册如何下载使用? 2010年,我思念你 ,你是我今生唯一的牵挂,用日语怎么翻译 申请捷信现金贷款后,资金多久可以到账 PCB PPC 是什么意思 有人知道捷信贷款怎么样吗?多久可以办下来。 你是我的唯一 的翻译 办理了捷信现金贷款,要几天才能到账啊 我国庆前一天申请的捷信贷款要什么时候可以拿到钱 "你是我唯一所爱的人"日文翻译 捷信、我在捷信贷了500元,手机已经收到短信说,贷款下放处理完成。钱要多久才到银行,这个捷信可信不 如何鉴别猫屎咖啡是否正宗 名贵的猫屎咖啡原产地在哪里? 猫屎咖啡和貂鼠咖啡是同一个咖啡吗 梦到掉了左边的大门牙有什么预兆? 梦见上门牙左边那颗掉了 微信空间说说怎么发表 梦见左边门牙掉了怎么会事 梦见左门牙掉了 昨天梦见门牙左边的那颗牙掉了该怎么办呢? 梦见给别人介绍的女朋友女方不愿意 梦见假装当别人女朋友 如果我梦见了一个男生叫我当他女朋友,代表什么 java框架hibernate的实体对象有哪三种状态?以及这三种状态下,对实体进行修改会不会同步到数据库里? 性能测试 百度小程序DAU达到10以上才可以参与小程序质量评估,如何快速提升DAU? 广西公需科目是什么意思 苹果8p微信里没有性能检测? hibernate的对象的三种持久化状态,并给出解释? 男人带耳钉。你们怎么看呢?很不成熟的表现吗?女孩你们来回答哈。长的还不错。带耳钉男的, 刚打完耳洞5天了 买的银针好小