JPA架构(JPA - Architecture)

选中文字可对指定文章内容进行评论啦,→和←可快速切换按钮,绿色背景文字可以点击查看评论额。

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

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

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

 

第一个类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类是什么关系呢?如果它和实体管理器是一对一的关系话,那么意味着在一个事务中,我们只能操作一个实体,这显然是不合理的,因此它和实体管理器是多对一的关系。

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

 

  • 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,总结一下:

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

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

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

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

 

版权声明:著作权归作者所有。

相关推荐

GPU架构学习资源

这里收藏了gpu学习的网站,pdf等等资源:http://courses.cms.caltech.edu/cs179/http://www.amd.com/Documents/GCN_Architecture_whitepaper.pdfhttps://community.arm.com/graphics/b/bloghttp://cdn.imgtec.com/sdk-documentation/

Go语言日志框架logrus封装

logrus在github上是一个star数比较高的go日志框架,简单封装如下:package log import ( "fmt" "github.com/Sirupsen/logrus" "runtime" "strings" ) var logger = logrus.New() // 封装logrus.Fields type Fields logrus.Fields func SetLog

Spring JPA报错:Not supported for DML operations

在一个Spring JPA项目中,执行更新或删除是报错:Not supported for DML operations解决方法:只需要添加注解@Modifying即可。@Modifying@Query(value = "update User user set user.address = :address where user.id = :id ")void updateUserAddress

模式结构

模式的结构一般分为是三个部分:需求(Forces)结果上下文(Resulting Context)相关模式(Related Patterns)说明如下:需求是必须解决的问题,它描述了必须解决的问题和围绕这个特定问题的上下文环境。需求有时候会发生冲突,必须予以取舍,选择最重要的需求来解决。结果上下文是采用模式后可能带来的后果,它描述了采用这个模式后的结果,它包含三个部分: 好处,弊端和问题。相关模式

JPA中OneToMany关系时,单向关联和双向关联如何使用?

最近因为项目的原因,所以需要使用JPA来对数据进行持久化,因此对这部分内容做了一些总结,特别是对@OneToMany这个注解有了一些学习和理解:我们知道,注解@OneToMany是对一对多关系的一个注解,这里我们需要注意的是:一对多的关系分为两类,一类是单向关系,另一类就是双向关系这里就有一个问题啦?啥叫单向关系(unidirectional),啥叫双向关系(bidirectional)?首先解释

初识JPA

1、什么是JPA?        JPA的全称是Java Persistence API,翻译成中文就是java对象持久化应用程序接口。JPA是Sun公司在Java EE5中提出的java对象持久化应用程序接口。2、JPA的优势是什么?标准化对容器级特性支持简单易用,集成方便可媲美JDBC的查询能力支持面向对象的高级特性3、JPA的缺点是什么?性能不好?学习

JPA实体状态学习-(瞬时态:Transient)

为了学习实体的状态,我们还是贴出这张实体状态转换迁移图:Transient(瞬时态)按照上图的描述,java对象在内存中被赋值后,没有调用entityManager.persist()方法之前实体对象所处的状态就是瞬時態举个例子:Teacher teacher = new Teacher("email@dot.com");此时,实例teacher就处于new/transient态(备注:这里的ne

JPA实体状态学习-(持久态:Persistent)

今天我们继续学习JPA的实体状态转化,老规矩贴上实体转化的转化图: 上一节我们学习了:entityManager调用persist()方法后,实体的状态从transient到persistent,这个时候对persistent状态的实体改变也会同步持久化到数据库,执行tx.commit()之后实体进入detached状态,此时对实体进行改变后不会同步到数据库。今天我们来看看transie

微前端架构【译】

作者:Muhammad Anser来自🇵🇰的软件工程师,作家,演讲者和喜欢编写技术的技术极客。 在深入研究微前端技术之前,我们必须了解什么是微服务架构,因为微前端的概念隐约受到微服务的启发并以微服务命名。根据官方文档,微服务(也称为微服务架构)是一种架构风格,它将应用程序构建为一组服务,这些服务是:高度可维护和可测试松散耦合可独立部署围绕业务能力进行组织小团队微服务架构支持快速、频繁