Persistence对象: 主要作用是用于获取EntityManagerFactory对象的,通过调用该类的createEntityManagerFactory静态方法,根据配置文件中持久化单元名称创建EntityManagerFactory。
String unitName = “myJpa”;
EntityManagerFactory factory= Persistence.createEntityManagerFactory(unitName);
EntityManagerFactory:主要用来创建 EntityManager 实例,由于EntityManagerFactory 是一个线程安全的对象(即多个线程访问同一个EntityManagerFactory 对象不会有线程安全问题),并且EntityManagerFactory 的创建极其浪费资源,所以在使用JPA编程时,我们可以对其进行优化,满足一个项目中只有一个EntityManagerFactory。
//创建实体管理类
EntityManager em = factory.createEntityManager();
EntityManager: 是完成持久化操作的核心对象,通过调用 EntityManager可以将实体类转化为持久化对象。EntityManager对象在一组实体类与底层数据源之间进行 O/R 映射的管理。它可以用来管理和更新 Entity Bean, 根椐主键查找 Entity Bean, 还可以通过JPQL语句查询实体。
我们可以通过调用EntityManager的方法完成获取事务,以及持久化数据库的操作方法说明:
-
getTransaction : 获取事务对象
-
persist : 保存操作
-
merge : 更新操作
-
remove : 删除操作
-
find/getReference : 根据id查询
EntityTransaction: 在 JPA 规范中,EntityTransaction是完成事务操作的核心对象,对于EntityTransaction在我们的java代码中承接的功能比较简单begin:开启事务、commit:提交事务、rollback:回滚事务
测试代码:
@Test
public void test() {
/**
-
创建实体管理类工厂,借助Persistence的静态方法获取
-
其中传递的参数为持久化单元名称,需要jpa配置文件中指定
*/
EntityManagerFactory factory = Persistence.createEntityManagerFactory(“myJpa”);
//创建实体管理类,工厂对象
EntityManager em = factory.createEntityManager();
//获取事务对象,通过实体管理类工厂获取实体管理器
EntityTransaction tx = em.getTransaction();
//开启事务,获取事务对象
tx.begin();
//完成增删改查操作
Customer c = new Customer();
c.setCustName(“客户1”);
c.setCustIndustry(“程序员”);
//保存操作
em.persist©;
//提交事务(回滚事务)
tx.commit();
//释放资源
em.close();
factory.close();
}
JPA中的主键生成策略: