Persistence
Persistence类使用于获取EntityManagerFactory实例,该类包含一个名为createEntityManagerFactory的静态方法。
// 创建EntityManagerFactory String persistenceUnitName = "Jpa-helloword"; EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName);
Persistence提供了两个创建EntityManagerFactory的方法:
Map<String, Object> map = new HashMap<>(); map.put("hibernate.show_sql", false); EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName, map);
该方法中可以起到修改persistence.xml的作用。
上边的代码尽管persistence.xml配置内配置项“hibernate.format_sql”属性为true,但是我们在创建EntityManagerFactory的方法中传入了参数后,会覆盖persistence.xml中的配置项的值。
EntityManagerFactory
EntityManagerFactory接口主要用来创建EnittyManager实例,该接口约定了如下4个方法:
- createEntityManager():用于创建实体管理器对象实例。
- createEntityManager(Map map):用于创建实体管理器对象实例的重载方法,Map参数用于提供EntityManager的属性。
- isOpen():检查EntityManagerFactory是否处于打开状态。实体管理器工厂创建后一直处于打开状态,除非调用close()方法将其关闭。
- close():关闭EntityFactoryFactory。EntityManagerFactory关闭后将释放所有资源,isOpen()方法测试将返回false,其它方法将不能调用,否则将导致IllegalStateException异常。
EntityManager
准备工作:新建功能添加JPA,Spring依赖相关参考《JPA(二):HellWord工程》
Person.java
package com.dxsoft.jpa.helloword; import java.util.Date; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; import org.junit.After; import org.junit.Before; import org.junit.Test; public class Client { private String persistenceUnitName = "Jpa-helloword"; private EntityManagerFactory entityManagerFactory = null; private EntityManager entityManager = null; private EntityTransaction entityTransaction = null; @Before public void init() { // 1.创建EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName); // 2.创建EntityManager entityManager = entityManagerFactory.createEntityManager(); // 3.开始事务 entityTransaction = entityManager.getTransaction(); entityTransaction.begin(); } @After public void destory() { // 5.提交事务 entityTransaction.commit(); // 6.关闭EntityManager entityManager.close(); // 7.关闭EnityManagerFactory entityManagerFactory.close(); }