1、首先我们来看一下在夫妻场景下,Wife实体类。Spring Data JPA中实体类相关的注解已经介绍过了,我们不再重复。@Dat和@NoArgsConstructor是lombok的注解。
2、接下来Husband实体类中我们先介绍两个注骈禄笫杳解,@JoinColumn注解定义外键关联的字段名称,@JoinColumn需要配合@One皈其拄攥ToOne和@ManyToOne等注解一起使用,单独使用没有任何意义。@JoinColumns注解可以定义多个字段的关联关系。首先我们先来看一下@OneToOne的源码。其中CascadeType定义了PERSIST、REMOVE、REFRESH、ALL四种级联操作策略。mappedBy表示关联关系被谁维护,可以不填。
3、@OneToOne和@JoinColumn一起使用,可以双向关联,也可以只配置一方。我们在Husband实体类中的Wife属性上加上这两个注解即可。
4、实体类和相应的注解准备好之后,我们开始介绍JPA的使用了,首先我们创建两个接口,这两个接口分别继承了JpaRepository接口,接口中有一个findByName方法。
5、接下来我们通过单元测试学习JPA中一对一关系的使用,首先我们创建一个单元测试类,单元测试类需要的注解和注入的bean如下图所示。首先我们来看一下持久化的操作,在没有加入cascade = {CascadeType.PERSIST,CascadeType.REMOVE}之前,Husband和Wife可以分别持久化,Husband中的 wife属性需要先设置再持久化,因此需要先保存Wife再保存Husband。
6、接下来我们学习删除操作,在数据库中没有外键的情况下,都是可以分别删除成功的。在加入cascade = {CascadeType.PERSIST,CascadeType.REMOVE}之前,有外键的情况下,需要先删除外键,然后才能删除Wife,如下图所示。
7、那么在加入cascade = {CascadeType.PERSIST,CascadeType.REMOVE}之后呢,级联持久化,Husband在持久化的同时就可以持久化Wife,级联删除,在删除Husband的同时也可以删除Wife。