JPA架构(JPA - Architecture)

时间:2022-06-01 21:39:12

今天我们来学习一下JPA的架构,首先问一个问题,大家学习理解一个架构有什么好的方法呢?

对于我自己来说,我觉得架构图是理解架构最好的方式

JPA架构(JPA - Architecture)

以上就是JPA的架构图,我们可以知道,JPA的主要部分包括五个类:

JPA架构(JPA - Architecture)

 

第一个类EntityManagerFactory,我们可以称为实体管理器工厂类,很显然,这个类的作用是创建和管理多个实体管理器类,因此,我们可以大胆猜测,实体管理器工厂类和实体管理器是一对多的关系。

第二个类EntityManager,我们称为实体管理器类,我们可以大胆猜测实体管理器可以管理多个实体,且它能够对多个不同的实体进行操作,因此它和实体之间是一对多的关系。那么,问题来了,实体管理器和下面的实体事务(EntirtyTransaction)之间是什么关系呢?这里我举个例子哈,加入实体管理器负责存储订单信息,订单信息包含两个实体,订单和订单名字,显然这两个实体必须在同一个事务中,因此我们大胆猜想:实体管理器和实体事务是一对一的关系。下面的伪代码说明了这个关系

EntityManager entityManager = entityManagerFactory.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();

 

第三个类是实体类,它包含很多状态,今天我们不在这里详细分析和学习。

第四个类是EntityTransaction类,实体管理事务类,由上面的表格和我们的猜想分析,它和实体管理器是一对一的关系。

第五个类是Persistence类,这个类大概应该就是管理实体管理器工厂类的具体类,以及管理一些配置信息的类,比如数据库的元数据信息。

第六个类是Query类,问题来了,它和EntityManager类是什么关系呢?如果它和实体管理器是一对一的关系话,那么意味着在一个事务中,我们只能操作一个实体,这显然是不合理的,因此它和实体管理器是多对一的关系。

下面,我们看看一个图,来检验一下我们的猜想:

JPA架构(JPA - Architecture)

 

  • The relationship between EntityManagerFactory and EntityManager is one-to-many. It is a factory class to EntityManager instances.
  • The relationship between EntityManager and EntityTransaction is one-to-one. For each EntityManager operation, there is an EntityTransaction instance.
  • The relationship between EntityManager and Query is one-to-many. Many number of queries can execute using one EntityManager instance.
  • The relationship between EntityManager and Entity is one-to-many. One EntityManager instance can manage multiple Entities.

OK,总结一下:

实体管理器工厂------->实体管理器            一对多的关系

实体管理器        ------->实体事务                一对一的关系

实体管理器        ------->实体查询                一对多的关系

实体管理器        ------->实体                        一对多得关系