我们在学习JPA实体状态的时候,常常会问,JPA的实体有多少状态呢?相信这个问题不难回答:
- 瞬时态(transient)
- 托管态(persistent)
- 游离态(detached)
- 移除态(removed)
注意:这里最后一个移除态,有的时候也叫删除态(deleted),至于它和移除态有啥区别,暂时没有想到,如果您对此有更加深刻的理解,请留言回复。
为什么会有这四种状态呢?
啥,这个也有为啥,网上不是都这么说的,你怎么会提出这么个奇怪的问题?其实不然,我们对一个事物的理解,不仅要理解表象,更要深入理解本质:
这里我说说自己的一些浅见:
首先,一个实体对象从创建到持久化的数据库,必然会有自己的生命周期,而生命周期是由一些状态构成的,因此,我理解的一个结论是:实体状态是对实体对象生命周期的一个抽象。
其次,想到了状态的变化,您想到了啥?对了,就是状态机。想到深入理解实体状态的变化,其实就是掌握实体生命周期状态的迁移。
以上图片就是实体生命周期中状态的迁移变化图。
我这里有一个小小的心得就是,如果在使用JPA的时候遇到问题,我的第一反应就是,当前我操作的实体属于生命周期的哪个状态?然后再排查其他情况。
最后,为啥一定需要四种状态来管理实体对象的生命周期呢?removed和detached有啥区别呢?我们留待下一篇通过代码来学习讨论。我们会使用Hibernate来作为例子进行讨论。