JPA#OneToOne
无力吐槽。
一对一,一个人有一个身份证号码、一个人有一条命,类似于这一种的就是一对一的关系。
涉及到的注解两个:
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的更多相关文章
- JPA实体关系映射:@ManyToMany多对多关系、@OneToMany@ManyToOne一对多多对一关系和@OneToOne的深度实例解析
JPA实体关系映射:@ManyToMany多对多关系.@OneToMany@ManyToOne一对多多对一关系和@OneToOne的深度实例解析 今天程序中遇到的错误一 org.hibernate.A ...
- Spring JPA中OneToOne和OneToMany用法
Spring工程中,创建实体对象时,可以通过JPA的@Entity标识实体与数据库表的对应关系,@Column标识数据库字段.其中还有标识两个实体间关系的注解:@OneToOne.@OneToMany ...
- Spring boot data JPA数据库映射关系 : @OneToOne,@OneToMany,@ManyToMany
问题描述 在利用Spring boot data JPA进行表设计的时候,表对象之间经常存在各种映射关系,如何正确将理解的映射关系转化为代码中的映射关系是关键之处. 解决办法 概念理解 举例:在公司的 ...
- websphere部署 hibernate jpa & Error 500: javax/persistence/OneToOne.orphanRemoval()Z
WebSphere 7 & Javax/Persistence/OneToMany.OrphanRemoval() Error 文章出处:http://www.mkyong.com/websp ...
- JPA关系映射之one-to-one
一对一关联有两种实现方式:一种是共享的主键关联,另一种是一对一的外键关联 1.共享的主键关联:让两个对象具有共同的主键值,以表明他们之间的一一对应关系. Person.java类 public cla ...
- JPA中关联关系(OneToOne、OneToMany、ManyToMany,ManyToOne)映射代码片段
在使用Hibernate的时候我们常常会在类里边配置各种的关联关系,但是这个并不是很好配置,配置不当会出现各种各样的问题,下面具体来看一下: 首先我们来看User类里边有一个IdentityCard类 ...
- JPA笔记3 OneToOne
package one_to_one; import javax.persistence.Entity; import javax.persistence.FetchType; import java ...
- spring boot jpa 多表关联 @OneToOne @OneToMany @ManyToOne@ManyToMany
1.一对一关联 @OneToOne import lombok.Data; import javax.persistence.*; /** * @Author: GWL * @Description: ...
- jpa
学习尚硅谷jpa笔记: 所依赖的jar包: 首先在META-INF下创建配置文件,persistence.xml <?xml version="1.0" encoding=& ...
随机推荐
- SpringMVC 自定义类型转换
类型转换可以将请求参数转换为指定的类型.指定的格式(数据的格式化),然后传给业务方法的参数. Spring MVC内置了常用的类型转换器.如果内置的类型转换器满足不了需求,可以使用自定义的类型转换. ...
- SpringMVC 接收表单数据、数据绑定、解决请求参数中文乱码
接收表单数据有3种方式. 1.使用简单类型接收表单数据(绑定简单数据类型) 表单: <form action="${pageContext.request.contextPath}/u ...
- SpringBoot 集成MyBatis、事务管理
集成MyBatis (1)在pom.xml中添加依赖 <!-- mybatis的起步依赖.包含了mybatis.mybatis-spring.spring-jdbc(事务要用到)的坐标 --&g ...
- nginx_1_初始nginx
一.nginx简介: nginx是一个性能优秀的web服务器,同时还提供反向代理,负载均衡,邮件代理等功能.是俄罗斯人用C语言开发的开源软件. 二.安装nginx step1:安装依赖库 pcre(支 ...
- python基本输入输出函数与变量类型
7.python具有三个重要的输出输入函数:print(输出)/eval(转换)/input(输入): 8.对于输出函数print函数的具体使用规则如下:(1)输出字符串:print("字符 ...
- python正则表达式错误集
这篇博文主要记载一些个人的(python)正则表达式的常见错误以及误区,所以,不一定全面,不一定具有权威.但我会把每个例子列出来,争取用事实说话. 大括号中空格问题 In [15]: re.match ...
- PhpStorm 10.0.1破解激活步骤
1.下载破解补丁 链接:https://pan.baidu.com/s/1S4JVKiaFnCZG01MpDPaAAA 密码:c6x6 放到phpstorm安装目录下的lib文件夹下: C:\soft ...
- C语言表结构(1)
1.顺序表初始化实战: #include<stdio.h> #include<stdlib.h> #define OK 1 #define OVERFLOW 0 #define ...
- i春秋-密码-IceCTF-Alien Message
题目: 对应的解题图片: 解的时候,符号大点的是大写,小点的是小写. IceCTF{gOOd_n3wZ_3vERyoN3_1_L1k3_fU7ur4Ma_4nd_tH3iR_4maZ1nG_3As7e ...
- PAN3501兼容AS3933-BTST
PAN3501是一颗是15–150kHz频率范围.3通道低频唤醒接收器,3通道低频唤醒接收器,且具备自动天线调谐功能.另外还比AS3933基础功能上增加了多了几个寄存器,大大增加了给使用者的空间,灵活 ...