JPA实体状态深入理解

时间:2022-06-01 12:45:01

我们在学习JPA实体状态的时候,常常会问,JPA的实体有多少状态呢?相信这个问题不难回答:

  • 瞬时态(transient)
  • 托管态(persistent)
  • 游离态(detached)
  • 移除态(removed)

注意:这里最后一个移除态,有的时候也叫删除态(deleted),至于它和移除态有啥区别,暂时没有想到,如果您对此有更加深刻的理解,请留言回复。

为什么会有这四种状态呢?

啥,这个也有为啥,网上不是都这么说的,你怎么会提出这么个奇怪的问题?其实不然,我们对一个事物的理解,不仅要理解表象,更要深入理解本质:

这里我说说自己的一些浅见:

首先,一个实体对象从创建到持久化的数据库,必然会有自己的生命周期,而生命周期是由一些状态构成的,因此,我理解的一个结论是:实体状态是对实体对象生命周期的一个抽象。

其次,想到了状态的变化,您想到了啥?对了,就是状态机。想到深入理解实体状态的变化,其实就是掌握实体生命周期状态的迁移。

JPA实体状态深入理解

以上图片就是实体生命周期中状态的迁移变化图。

我这里有一个小小的心得就是,如果在使用JPA的时候遇到问题,我的第一反应就是,当前我操作的实体属于生命周期的哪个状态?然后再排查其他情况。

最后,为啥一定需要四种状态来管理实体对象的生命周期呢?removed和detached有啥区别呢?我们留待下一篇通过代码来学习讨论。我们会使用Hibernate来作为例子进行讨论。