无力吐槽。

一对一,一个人有一个身份证号码、一个人有一条命,类似于这一种的就是一对一的关系。


涉及到的注解两个:

OneToOne

JoinColumn(

name="当前实体对应数据库表中的字段名称,这个字段是一对一关系中对方的主键,这个字段是本表中的外键",

referencedColumnName="这是个数据库表的字段名称,字段为当前表的外键所对应的另外一张表的主键"

JsonIgnoreProperties(value = {"需要被忽略的字段名称,这个字段来自哪里需要通过实际情况判定"})


举一个例子:一个学生有一个桌子

@Entity
@Table(name="t_student")
public class Student {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private Integer id; @Column(name="name")
private String name; /**
* Column作用在实体的简单属性上面,简单属性就是String,Integer等类型,
* 体现在数控表上面就是一个字段。
*
* JoinColumn 作用在实体的复杂属性上面,复杂属性就是别的实体,
* 体现在数据库表格上面就是一个外键。
*
* JoinColumn.name 是当前复杂属性(此处是desk)在本实体所对应数据库表(t_student)的外键(即t_student.desk_id)。
* JoinColumn.referencedColumnName 外键(desk_id)所引用的那个表(t_desk)的主键(id)。
*
* JsonIgnoreProperties.value 是在序列化本实体Student对象为JSON时,在处理复杂属性desk时候,忽略desk的student属性
* 否则将会导致desk与student实例间的相互引用产生死循环。
*/
@OneToOne
@JoinColumn(name="desk_id",referencedColumnName="id")
@JsonIgnoreProperties(value="student")
private Desk desk; @Override
public String toString() {
return ReflectionToStringBuilder.toString(this, ToStringStyle.MULTI_LINE_STYLE);
} }

  

@Entity
@Table(name="t_desk")
public class Desk {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private Integer id; @Column(name="name")
private String name; /**
* mappedBy的取值往往是两个关联关系对应实体(此处是Student与Desk)中另外一个实体(Student)的一个属性(desk)。
*
* 如何理解呢?下面是个人的理解,可能不准确。
* Desk这个类拥有id,name,student三个属性,
* desk.student属性如何与student类的实例进行关联呢?
* 当然是通过student的desk属性,让desk.student与student进行关联。
* 因此,此处的mappedBy应该为被注解的属性的一个属性,被注解的属性的属性应该是本实体对应数据库表的在其他表中的一个外键。
*/
@JsonIgnoreProperties(value="desk")
@OneToOne(mappedBy="desk")
private Student student; @Override
public String toString() {
return ReflectionToStringBuilder.toString(this, ToStringStyle.MULTI_LINE_STYLE);
} }

  

数据库表:

_

映射,无论是一对一或者是其他的映射形式,都在另外一个维度分为单向的映射,以及双向映射。其中双向映射时候,JSON序列化会产生死循环。

解决双向映射时候的json序列化死循环需要通过类似@JsonIgnoreProperties(value = {"student"})的注解来完成。

@JsonIgnoreProperties的作用是被作用的实体属性的属性如果需要被忽略(往往是死循环的原因),就用这个注解来完成。

JPA#OneToOne的更多相关文章

  1. JPA实体关系映射:@ManyToMany多对多关系、@OneToMany@ManyToOne一对多多对一关系和@OneToOne的深度实例解析

    JPA实体关系映射:@ManyToMany多对多关系.@OneToMany@ManyToOne一对多多对一关系和@OneToOne的深度实例解析 今天程序中遇到的错误一 org.hibernate.A ...

  2. Spring JPA中OneToOne和OneToMany用法

    Spring工程中,创建实体对象时,可以通过JPA的@Entity标识实体与数据库表的对应关系,@Column标识数据库字段.其中还有标识两个实体间关系的注解:@OneToOne.@OneToMany ...

  3. Spring boot data JPA数据库映射关系 : @OneToOne,@OneToMany,@ManyToMany

    问题描述 在利用Spring boot data JPA进行表设计的时候,表对象之间经常存在各种映射关系,如何正确将理解的映射关系转化为代码中的映射关系是关键之处. 解决办法 概念理解 举例:在公司的 ...

  4. websphere部署 hibernate jpa & Error 500: javax/persistence/OneToOne.orphanRemoval()Z

    WebSphere 7 & Javax/Persistence/OneToMany.OrphanRemoval() Error 文章出处:http://www.mkyong.com/websp ...

  5. JPA关系映射之one-to-one

    一对一关联有两种实现方式:一种是共享的主键关联,另一种是一对一的外键关联 1.共享的主键关联:让两个对象具有共同的主键值,以表明他们之间的一一对应关系. Person.java类 public cla ...

  6. JPA中关联关系(OneToOne、OneToMany、ManyToMany,ManyToOne)映射代码片段

    在使用Hibernate的时候我们常常会在类里边配置各种的关联关系,但是这个并不是很好配置,配置不当会出现各种各样的问题,下面具体来看一下: 首先我们来看User类里边有一个IdentityCard类 ...

  7. JPA笔记3 OneToOne

    package one_to_one; import javax.persistence.Entity; import javax.persistence.FetchType; import java ...

  8. spring boot jpa 多表关联 @OneToOne @OneToMany @ManyToOne@ManyToMany

    1.一对一关联 @OneToOne import lombok.Data; import javax.persistence.*; /** * @Author: GWL * @Description: ...

  9. jpa

    学习尚硅谷jpa笔记: 所依赖的jar包: 首先在META-INF下创建配置文件,persistence.xml <?xml version="1.0" encoding=& ...

随机推荐

  1. js图片瀑布流效果

    要实现图片瀑布流效果,首先得准备几张图片. html的部分比较简单就是将图片加载到浏览器就可以了 代码如下(注意放的图片多一点要不然之后无法滑动鼠标就无法达到瀑布流效果): <!DOCTYPE ...

  2. Django 学习 之 模板(html)与配置静态文件

     一.模板(html) 1.模板语法之变量:语法为 {{ }} 在 Django 模板中遍历复杂数据结构的关键是句点字符, 语法:{{ var_name }} var_name 是一个变量名称,需要和 ...

  3. 傅盛读书笔记:下一个Moonshot是什么?

    猎豹移动CEO 傅盛 九月底,我有幸在硅谷拜访了苹果前CEO斯卡利.老人如今已经75岁高龄,但看起来仍充满活力.他花了一上午的时间跟我们沟通,非常谦和.平等.坦诚,给我留下了很深的印象.末了,给我们介 ...

  4. 十一 队列 Queue

    队列:  一种先进先出的数据结构  FIFO 数组队列的实现:

  5. Manthan, Codefest 19(Div. 1 + Div. 2)

    传送门 A. XORinacci 签到. Code /* * Author: heyuhhh * Created Time: 2020/2/26 9:26:33 */ #include <ios ...

  6. (4)LoraWAN:Physical Message Formats

    四.Physical Message Formats LoRa数据包结构 LoRaTM调制解调器采用隐式和显式两种数据包格式.其中,显式数据包的报头较短,主要 包含字节数.编码率及是否在数据包中使用循 ...

  7. DICOM设备Raw Data与重建

    DICOM设备Raw Data与重建      现在的医疗影像设备基本都已DICOM为标准.但现在许多医院的技术人员都以为只要支持DICOM就一切OK,其实不然.DICOM中有Storage.Prin ...

  8. 「CF55D」Beautiful numbers

    传送门 Luogu 解题思路 毒瘤数位DP,发现一个前缀我们只需要记录它对 \(\operatorname{lcm}(1,2,3,\cdots,9)=2520\) 取模的值即可,所以我们在 DP 时记 ...

  9. Vue.js事件处理

    Vue.js事件处理 1.v-on指令 用法如下:使用v-on:指令指定其执行的具体内容或者方法名即可. <button v-on:click='num++'>giao</butto ...

  10. An attempt was made to call the method com.google.gson.GsonBuilder.setLenient()Lcom/google/gson/GsonBuilder; but it does not exist. Its class, com.google.gson.GsonBuilder, is available from the foll

    SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/G:/sharp/repo ...