您的位置:首页 > 编程语言 > Java开发

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

2007-06-22 08:17 555 查看
目标:掌握实体管理器和实体管理器工厂的使用。
主要内容:
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》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: