章節目標
使用JPA EntityManagerFactory
使用注解提供映射信息
使用 JPA 接口
本教程可在 entitymanger/ 路徑下下載
4.1. persistence.xml
之前的章節使用了hibernate原生的配置文件hibernate.cfg.xml。然而,JPA中定義了不同的的自助配置文件persistence.xml。這個啟動過程在JPA文檔里面有詳細定義。在JAVA SE環境中,持久層的提供者(在此為hibernate)是根據路徑MEATA-INF/persistence.xml找到所有JPA配置文件的前提。
案例 10.?persistence.xml
...
persistence.xml文件應為每個“persistent unit”提供一個唯一值。當程序得到javax.persistence.EntityManangerFactory的定義是要通過這個值去找到配置文件。
有關設置的定義已包括在Hibernate配置文件的章節中。 以javax.persistence為前綴的元素可在需要的時候使用。需要注意的是,其余的Hibernate相關的設置名稱現在都以hibernate.為前綴。
另外,元素依舊與2.1.Hibernate配置文件的章節中描述的一樣。
4.2. 注解過的實體類
這里的實體與2.1.Hibernate配置文件的章節中描述的一樣
4.3. 代碼實例
之前的教程使用的是hibernate原生接口,這個章節使用的是JPA接口
案例 11. 使用javax.persistence.EntityManagerFactory
protected void setUp() throws Exception {
sessionFactory = Persistence.createEntityManagerFactory( "org.hibernate.tutorial.jpa" );
}
注意,此處的持久層名稱“org.hibernate.tutorial.jpa”與persistence.xml中一致。
案例 12. 存儲(有持久屬性)實體
EntityManager entityManager = sessionFactory.createEntityManager();
entityManager.getTransaction().begin();
entityManager.persist( new Event( "Our very first event!", new Date() ) );
entityManager.persist( new Event( "A follow up event", new Date() ) );
entityManager.getTransaction().commit();
entityManager.close();
代碼與之前存儲實體的章節中一樣。javax.persistence.EntityManager接口替換了org.hibernate.Session接口。JPA中將這個操作稱作“persist”,有別于“save”。
案例 13. 獲得實體集合
entityManager = sessionFactory.createEntityManager();
entityManager.getTransaction().begin();
List result = entityManager.createQuery( "from Event", Event.class ).getResultList();
for ( Event event : result ) {
System.out.println( "Event (" + event.getDate() + ") : " + event.getTitle() );
}
entityManager.getTransaction().commit();
entityManager.close();
此處代碼與之前的獲得實體集合相似。
4.4. 更進一步
練習
配置一個ELB Session Bean來研究容器管理持久層的用法,包括stateless和stateful兩種情況。
用CDI為基礎注入的監聽器來配置一個JMS事件管理器。