Java持久性API(JPA)第8讲——实体管理器和实体管理器工厂

 
目标:掌握实体管理器和实体管理器工厂的使用。
主要内容:
u       javax.persistence.Persistence类
u       javax.persistence.EntityManagerFactory接口
u       javax.persistence.EntityManager接口
u       EntityManagerFactory对象的获取
u       EntityManager对象的获取
u       用法
1、javax.persistence.Persistence类
该类用于获取EntityManagerFactory,主要有两个方法:
u       createEntityManagerFactory(String persistenceUnitName),创建并返回参数所指定的持久单元名字所对应的EntityManagerFactory。
u       createEntityManagerFactory(String persistenceUnitName,Map properties),创建并返回EntityManagerFactory,第一个参数是持久单元的名字,第二个参数是创建EntityManagerFactory所需要的属性,这些属性会覆盖其他地方设置的属性。
两个方法均为静态方法,直接通过类名访问即可。
2、实体管理器工厂EntityManagerFactory
实体管理器工厂用于管理实体管理器,是EntityManagerFactroy的对象。主要方法如下:
u       createEntityManager(),创建实体管理器
u       createEntityManager(Map map),根据指定的属性创建实体管理器
u       close(),关闭实体管理器工厂,释放资源
u       isOpen(),判断实体管理器工厂是否关闭
接口的详细定义参加教材356页。
3、实体管理器EntityManager
对实体的操作由实体管理器完成。主要方法如下 ( 接口详细定义参考书上 357 )
u        persist(Object o) ,持久化实体
u        merge(T o) ,合并实体状态
u        remove(Object entity) ,删除实体
u        find(Class entityClass,Object primarykey) ,根据主键查找实体
u        flush() ,同步到数据库
u        setFlushMode(FlushModeType flushMode) ,设置同步方式
u        getFlushMode() ,得到同步方式
u        lock(Object entity,LockModeType lockMode) ,锁定
u        refresh(Object entity) ,更新状态
u        clear() ,清除持久上下文
u        contains(Object entity) ,判断实体是否属于当前上下文环境
u        createQuery(String sqlString) ,创建查询
u        createNamedQuery(String name) ,创建命名查询
u        createNativeQuery(String sqlString) ,创建标准 SQL 查询
u        createNativeQuery(String sqlString,Class resultClass) ,创建标准 SQL 查询,并指定查询的结果
u        createNativeQuery(String sqlString,String resultsetMapping) ,创建标准 SQL 查询,并指定查询的结果如何映射
u        getTransaction() ,返回事务对象
4、实体管理器工厂的获取
实体管理工厂可以注入,也可以通过Persistence类获取。
4.1 通过注入获取实体管理器工厂
实体管理器工厂可以使用元注释注入,可以使用下面的元注释:
javax.persistence.PersistenceUnit
表示一个对EntityManagerFactory的依赖。属性如下:
u       属性name:在环境引用上下文中(in the environment referencing context,)访问EntityManagerFactory所使用的名字,如果使用依赖注入,就不需要了。默认值是空字符串。
u       属性unitName:在persistence.xml中定义的持久单元的名字。如果要指定,JNDI中使用的实体管理器工厂的持久单元应该和该名字相同。
例如:
@PersistenceUnit
EntityManagerFactory emf;
4.2 通过Persistence类获取
    EntityManagerFactory emf = Persistence.createEntityManagerFactory(“OrderEM”);
5、实体管理器的获取
实体管理器的获取可以通过 3 种方式:
u        注入实体管理器;
u        查找实体管理器;
u        使用实体管理器工厂创建实体管理器。
下面分别介绍。
5.1 注入实体管理器
在应用中可以注入实体管理器,注入实体管理器可以使用下面的元注释:
javax.persistence.PersistenceContext
表示一个对EntityManager持久上下文的依赖。该元注释中的属性如下:
u       属性name:在环境引用上下文中(in the environment referencing context,)访问实体管理器所使用的名字,如果使用依赖注入,就不需要了。默认值是空字符串。
u       属性unitName:持久单元的名字,如果指定了unitName元素,必须与在JNDI中能够访问的实体管理器的持久单元的名字相同。默认值是空字符串。
u       属性type指定事务类型:事务类型包括EXTEDNED(扩展持久上下文)和TRANSACTION(和事务范围的持久上下文)。
n         PersistenceContextType.EXTENDED
n         或者PersistenceContextType.TRANSACTION。
u       属性properties:为容器或者持久提供者指定属性。与特定持久性提供厂商相关的属性也可以包含在这组属性中。提供商不识别的属性将被忽略。默认值是{}。
例如:
@PersistenceContext
EntityManager em;
    如果在当前应用中有多个持久单元,需要指出持久单元的名字。
5.2 查找实体管理器
通过简单查找查找实体管理器:
声明:@PersistenceContext(name=”orderEM”)
注入SessionContext:@Resource SessionContext ctx;
查找:EntityManager em = (EntityManager)ctx.lookup(“orderEM”);
5.3 通过实体管理器工厂创建实体管理器
实体管理器工厂是EntityManagerFactory的对象,假设实体管理器工厂的对象是emf,创建实体管理器的代码如下:
EntityManager em = emf.createEntityManager();
6、用法
如果在Java SE环境下,需要通过javax.persistence.Persistence创建EntityManagerFactory对象,然后通过EntityManagerFactory对象创建EntityManager对象,然后使用EntityManager对象。
如果在Java EE环境下,除了可以使用上面的方法外,还可以注入EntityManager对象和EntityManagerFactory对象。如果是注入EntityManagerFactory,然后创建EntityManager对象。
教材:《Java EE 5实用教程——基于WebLogic和Eclipse》
 

你可能感兴趣的:(java,object,api,properties,String,jpa)