JPA对象的四种状态

本文详细介绍了JPA对象的四种状态,包括瞬时状态、持久状态、游离状态和删除状态,以及它们在EntityManager操作下的转换过程。
摘要由CSDN通过智能技术生成

JPA对象的四种状态

前言

博主在搜索Jpa对象四种状态的资料时发现,网上的某些资料存在误导(博主就被误导了,超无语),对于四种状态的概念有失偏颇。今天特地将四种状态学习总结一下,以便网友们深刻了解,有助于解决工作中遇到的问题。

实体对象的状态介绍

  • 瞬时状态:当对象刚被创建时,也就是使用new创建的实体对象,被称为瞬时状态。
  • 持久状态:当对象和EntityManager产生关系后进入持久化上下文,也就是调用persist()find()merge()方法后,被EntityManager管理,对象状态为持久状态。
  • 游离状态:当事务被提交时,该实体对象状态为游离状态,游离状态中的对象可以看作脱离了EntityManager管理。
  • 删除状态:当EntityManger调用remove()时,对象处于删除状态

下面我们来看一张图:
在这里插入图片描述
图中em指的就是EntityManager,我们一起分析一下状态之间的转换。

首先,New就是新创建的对象,此时的状态还是瞬时状态

em调用persist()方法后这个对象被em管理了,进入持久化上下文,对象状态切换为持久状态,这里的持久化不是说已经写入数据库了,因为还有事务呢。持久状态的数据只有在commit的时候才会写入数据库。
这里有一个点需要特别注意,在persist()merge()后,事务commit之前,如对象内容进行了修改,数据库中的最终结果就是你修改后的结果.

提交事务的后,数据写入数据库,对象的状态也发生了变化,变为游离状态。对象此时脱离了em的管理,已经不在持久化上下文了,也就是说,此时如果修改该对象的内容,数据库是不会变的。游离状态的对象特征是脱离em管理,另外对象有OID,其实就是对象的主键,在调用merge()方法后,对象又回到持久状态,还是那句话持久状态的数据只有在commit的时候才会写入数据库。

find()也就是查询,从数据库查询数据后对象状态直接进入持久状态,在em调用remove()后对象进入删除状态但java对象还在,只是状态变了,同样在事务提交后才会从数据库删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值