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=& ...
随机推荐
- Java-读取.properties配置文件空指针异常java.lang.NullPointerException解决方法
异常显示: 问题所在: 加载.properties配置文件路径多了一个斜杠 "/" : 解决方法: 去掉斜杠,重新启动程序即可. 总结: 遇到问题还是要认真阅读异常信息!
- 警示框UIAlertController的使用(看完马上会用!!)
本文尽量图文并茂,并且提供对应的代码,确保看到这篇文章马上能够上手使用UIAlertController控件.-我要兑现我的务实宣言- 本文构思: 1.出具效果图,通过这种最直接方式了解该控件的展示效 ...
- 洛谷 P5242 [USACO19FEB]Cow Dating P
这道题很有意思. 不难发现,对于一个区间 \([l, r]\),恰好只有一个奶牛接受邀请的概率为 \[\prod_{i=l}^r(1-p_i) \cdot \sum_{i=l}^r \frac {p_ ...
- 四 动态sql 标签的使用(if&where&sql片段&foreach)
if标签的使用: userMapper.xml userMapper.java junit: where标签: 注意:写了where标签就不用手动写where语句 sql片段的设置和调用: forr ...
- 记录一次Git远程仓库版本回退
操作过程: 首先查看远程仓库版本,如下图所见,最近一次提交为2018-03-19 22:16:25 第一步:使用git log命令查看历史提交记录,选择要回退的版本号,commit后面一串字符,这里我 ...
- SDL 显示汉字
#include "stdafx.h" #pragma comment(lib,"SDL.lib") #pragma comment(lib,"SDL ...
- OpenCV数字识别
输入命令: conda install opencv 返回信息:
- 插入和查询HBase速度都比较慢
表层问题:插入和查询HBase速度比较慢 排查一,查看HBase节点状态,发现正常运行: 排查二,查看访问HBase服务的状态,发现服务停止: 依次点击服务实例,查看服务状态 133和135节点上的服 ...
- 伪奢侈品iPhone大降价,肉搏国产手机胜算几何?
据国外媒体报道,苹果在中国降低iPhone价格的策略已收到明显的效果,自从1月11日正式调整价格以来,iPhone在苏宁电器平台上的销量飙升83%,而天猫上的销量也增长了76%,其中最受欢迎的机型是i ...
- 一、iBatis进行分页查询
1.ibatis理解: iBatis属于半自动化的ORM框架,我们需要编写SQL语句,由iBatis进行数据库访问,返回结果.而iBatis可以为我们做的更多,比如对查询参数集合.结果.分页查询.事务 ...