JPA 实体生命周期分为4种状态,其实跟HIBERNATE的映射实体差不多。分为:新建,受管,分离,删除。
新建:此时的内存中已经创建了实体实例( 比如 NEW People() ),但是还没有同数据库或持久化上下文进行关联,所以目前它还不是一个标准的持久实体身份。所以对它的任何改变,都不会同步到数据库中。
受管:此时实体已经在数据库中存在了持久化身份,并且同持久化上下文进行了关联,一般来说,在调用JPA的persist API后,实体实例已处于受管状态了。在修改实体之后,当事务提交,或显示调用flush()操作,实体状态会同步到数据库中。
分离:还具有持久化身份,但是不在同持久化上下文关联。
删除:同持久化上下文关联,但是客户已经打算从数据库销毁这一实体。
JPA的EntityManager也为我们准备好了API来完成对这些实体的操作:
persist方法将实体变为受管状态,持久化到数据库。merge方法将当前的实体状态合并(更新)到当前持久化上下文中。remove方法直接从数据库里销毁实体(删除),remove方法只是将数据库里的实体删除,并没有销毁内存里的实体对象,当事务提交或者调用flush方法,数据库里的实体才会被删除。
新建:此时的内存中已经创建了实体实例( 比如 NEW People() ),但是还没有同数据库或持久化上下文进行关联,所以目前它还不是一个标准的持久实体身份。所以对它的任何改变,都不会同步到数据库中。
受管:此时实体已经在数据库中存在了持久化身份,并且同持久化上下文进行了关联,一般来说,在调用JPA的persist API后,实体实例已处于受管状态了。在修改实体之后,当事务提交,或显示调用flush()操作,实体状态会同步到数据库中。
分离:还具有持久化身份,但是不在同持久化上下文关联。
删除:同持久化上下文关联,但是客户已经打算从数据库销毁这一实体。
JPA的EntityManager也为我们准备好了API来完成对这些实体的操作:
persist方法将实体变为受管状态,持久化到数据库。merge方法将当前的实体状态合并(更新)到当前持久化上下文中。remove方法直接从数据库里销毁实体(删除),remove方法只是将数据库里的实体删除,并没有销毁内存里的实体对象,当事务提交或者调用flush方法,数据库里的实体才会被删除。