1.JPA的实体生命周期:
JPA的实体有以下4中生命周期状态:
(1).New:瞬时对象,尚未有id,还未和Persistence Context建立关联的对象。
(2).Managed:持久化受管对象,有id值,已经和Persistence Context建立了关联的对象。
(3).Datached:游离态离线对象,有id值,但没有和Persistence Context建立关联的对象。
(4).Removed:删除的对象,有id值,尚且和Persistence Context有关联,但是已经准备好从数据库中删除。
四种状态总结:
状态名 作为java对象存在 在实体管理器中存在 在数据库存在
New yes no no
Managed yes yes yes
Detached no no no
Removed yes yes no
2.JPA实体状态的切换:
JPA实体的四种状态之间可以进行切换,具体如下:
3.容器管理和应用程序管理的EntityManager实体管理器:
在JPA中有两种管理实体管理器的方法:
(1).容器管理(Container-Manager)的实体管理器:
容器管理实体管理器,是由JavaEE容器所管理的实体管理器,通过PersistenceContext注入方式来生成实体管理器,具体代码如下:
@PersistenceContext(unitName=”持久化单元名称”)
Protected EntityManagerem;
(2).应用程序管理(Application-Manager)的实体管理器:
JPA不但可以在JavaEE容器中使用,也可以脱离JavaEE容器在JavaSE程序中使用,当JPA脱离了JavaEE服务器环境时,就需要通过应用程序来获取实体管理器,具体代码如下:
a. 代码方式:
//首先根据持久化单元创建实体管理器工厂
EntityManagerFactoryemf = Persistence.createEntityManagerFacotory(持久化策略文件中的持久化单元名称);
//通过实体管理器工厂创建实体管理器
EntityManager em= emf.createEntityManager();
b. 注解方式:
//将持久化单元注入实体管理器工厂中
@PersistenceUnit(持久化单元名称)
protected Entity