jpa

最新文章

Spring Boot 配置MySQL数据库重连

使用jdbc连接MySQL,如果连接失效,可能会报类似的错误:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 84,371,623 milliseconds ago. The last packet sent suc

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

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

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

JPA Hibernate 快速入门

为了学习JPA的实体状态的转化,我们先搭建一个通过JPA Hibernate存储实体到数据库的Demo,后续的学习都在此demo基础上展开。添加Hibernate依赖 <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager&l

JPA架构(JPA - Architecture)

今天我们来学习一下JPA的架构,首先问一个问题,大家学习理解一个架构有什么好的方法呢?对于我自己来说,我觉得架构图是理解架构最好的方式以上就是JPA的架构图,我们可以知道,JPA的主要部分包括五个类: 第一个类EntityManagerFactory,我们可以称为实体管理器工厂类,很显然,这个类的作用是创建和管理多个实体管理器类,因此,我们可以大胆猜测,实体管理器工厂类和实体管理器是一对

JPA实体状态深入理解

我们在学习JPA实体状态的时候,常常会问,JPA的实体有多少状态呢?相信这个问题不难回答:瞬时态(transient)托管态(persistent)游离态(detached)移除态(removed)注意:这里最后一个移除态,有的时候也叫删除态(deleted),至于它和移除态有啥区别,暂时没有想到,如果您对此有更加深刻的理解,请留言回复。为什么会有这四种状态呢?啥,这个也有为啥,网上不是都这么说的

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

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

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

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

JPA实体状态学习-(游离态:Detached)

今天我们学习另一种实体状态,老规矩还是先上图:Detached(游离态 unmanaged)An Object becomes detached when the currently running Persistence Context is closed. Any changes made to detached objects are no longer automatically prop

JPA实体状态学习-(移除态:Removed)

今天继续学习JPA中实体的最后一种状态:移除态。还是先把图晒出来:按照名称进行猜想,移除态应该就是对象从数据库中删除以后,对象变成了不受持久化上下文管理的移除态。不过呢,这里有一点需要注意的是:什么样的对象才会进入进入移除态呢?变成移除状态的对象是调用persist()方法后,是像persist一样参数对象受到持久化上下文管理呢?还是像merge方法一样返回的对象受到持久化上下文管理呢?这里还有一

JPA实体设计

实体是轻量级的领域对象,因此实体也称为领域模型。既然属于模型,那么模型应该遵守一些设计规范,设计实体的时候应该注意哪些规范呢?实体是属于领域模型,那么实体这个模型在多层软件架构中属于那一层呢? 多层架构程序我们首先用一张图来说明实体在多层软件架构中属于那一层?在一个多层软件架构中,领域模型能够被每一个组件访问。DAO层(Repository)用它来管理数据,展示层(Controller)

JPA实体注解(Entity Annotation)

今天我们开始学习可以用在实体上的注解,一样的道理,我们还是先弄一张图:按照难易程度,或者功能划分,我们分为三类,这样方便理解:基本注解映射关系注解查询注解 这里我们按照功能分类,也会添加一些后续会使用的注解:比如@EbeddedId,@IdClass等。我们先来看看注解@Entitypublic @interface Entity { /** * (Optional) T

JPA实体映射——Entity Mapping

学习JPA,实体之间的映射关系是最重要的一环,为了学习和讨论这部分知识,我们将这部分知识分为若干章节进行学习,我们也会用实际的例子进行分析,并且指出存在的问题,然后给出相应的优化方案。 第一步,我们列出具体的案例我们分别使用了三个实体:Institute(研究所),Department(部门),SocialProfile(社交账号)。如上图所示,研究所和部门是一对多的关系,研究所和社交账

JPA实体映射——一对多关系映射(上)

依照上一节的案例,我们来拆解一对多的关系怎么使用,首先还是把业务关系图弄出来。业务案例图业务分析从图中我们知道,研究所和部门是一对多关系,今天我们来展示,一对多设计的最佳实践。我们知道在JPA的实体设计中,一对多的关系可以设计成单向关联,也可以设计成双向关联。今天我们一步一步来实践各种设计,从而总结出最佳实践。Unidirectional @OneToMany 研究所实体port jav

JPA实体映射——一对多关系映射(中)

紧接上一节的学习,我们还是首先把业务关系图整理出来。业务案例图上一节我们知道,采用单向关联如果不使用@JoinColumn时,在新增一个研究所实体的时候,会生成三张表,并且会执行多条插入语句,在使用@JoinColumn时,会生成两张表,同时在departments上生成一个department_id字段,而JPA在插入数据时,采用的是先插入部门表数据,然后更新外键字段,这种方式,插入的效率不是很

JPA实体映射——一对多关系映射(下)

接上一节一对多关系的映射学习,今天我们学习一种双向关联的最佳实践,废话不说,先上业务实例图。业务实例图Bidirectional @OneToMany下面用代码说明双向关联的一对多关系研究所实体mport javax.persistence.*; import java.io.Serializable; import java.util.HashSet; import java.util.Set;

Cannot resolve com.oracle:ojdbc7_g:12.1.0.1

异常信息描述异常信息分析从日志可以看出是下载Oracle的数据库驱动问题。问题处理将maven的配置代码修改成<dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>

JPA实体映射——一对一关系映射

前几节我们介绍了一对多的关系,今天我们学习一对一关系以及这种映射方式的最佳实践,先上业务实例图。从图中可以看出,研究所和社交账号有一对一的关系,部门和社交账号也有一对一的关系,我们选用研究所和社交账号的关系来说明问题。Bidirectional @OneToOne研究所实体mport javax.persistence.*; import java.io.Serializable; import

JPA实体映射——多对一关系映射

前几节我们介绍了一对多的关系和一对一关系,今天我们学习多对一关系以及这种映射方式的最佳实践,先上业务实例图。在我们的业务关系图中,部门和研究所实体是多对一的关系,同时我们还是采用双向关联来说明问题Bidirectional @ManyToOne部门实体import javax.persistence.*; import java.io.Serializable; import java.util.

JPA JSON字符串与List以及对象的转换

有时为了方便,我们会吧对象或者List以JSON字符串的形式存放在数据库中。使用JPA就可以通过@Converte的方式实现。JSON字符与对象的转换,我们比较常用的时jackson,maven依赖如下:<dependencies> <!--加入jackson库--> <dependency> <groupId>com.

JPA存储枚举类型的几种处理方式

存储枚举类型到数据库可以分为以下三种需求:以整型存储,这个一般是按枚举定义的次序排列,即枚举的ordinal。存储为枚举的名称自定义存储枚举的内容,如code等等。在JPA 2.0以及之前的版本,一般使用的是@Enumerated来转换枚举类型,支持按枚举的ordinal和枚举名称来存储,不支持自定义枚举内存存储。JPA2.1引入Converter,就可以按需要定义转换枚举类型的存储。一、使用@E