开发中常用到数据表的关联(其实很难遇到。。),spring-data-jpa(其实是hibernate)提供了一整套十分方便的注解来供我们使用表关联功能。

OneToOne
OneToMany
ManyToOne
ManyToMany

举例之前,先理解两个表的关系中,哪一个是主体,一对一以及多对多需要自己按照现实场景来区分,而一对多和多对一始终是以多的一方为主体的。注解在使用中“始终在非主体的一方标记自己在主体中的名称”。
理解上面一段话,那么操作也会变得很简单。
开始前,把我们之前测试的Student表的主键生成策略改成自增,需要新增一些实体,ER图如下:

一对一

Student和Score是一对一的关系,Score类如下:

@Entity
@Table(name = "score")
public class Score { @Id @GeneratedValue private Integer id; @Column(name = "chinese_score") private Integer chinese; @Column(name = "math_score") private Integer math; //省略get/set } 

现在开始建立它和Student的关系,首先在Student类中加入元素Score,在Score类中也加入元素Student,并都用OneToOne标注,你中有我,我中有你。
Score:

  @OneToOneprivate Student student;

Student:

  @OneToOneprivate Score score;

然后我们需要区分谁是主体,按照现实理解,肯定是Student,于是我们需要在非主体的那个类中标注出它在主体中的名字,也就是在Score类中标注它在Student类中的名字:

  @OneToOne(mappedBy = "score")private Student student;

此外,我们还可以设置映射级联,只需要在注解中增加参数(千万要注意必须在主体一侧):

  @OneToOne(cascade = CascadeType.REMOVE )private Score score;

当student删除的时候,score对应也会删除。其他可以参看CascadeType类。

一对多(多对一)

现在我们开始建立student和school的关系,根据我们开始说的,student肯定是主体,那么我们只需要在school中标注出它在student中的名称就好了。建立School类:

@Entity
@Table(name = "school")
public class School { @Id @GeneratedValue private Integer id; private String name; //省略get/set } 

在Student类中加入School,并且指定关系是多对一

  @ManyToOneprivate School school;

在School中建立Student集合,指定关系是一对多,并且申明它在Student类中的名称

  @OneToMany(mappedBy = "school")private List<Student> students;

多对多

看到现在,大概也能知道多对多怎么设置了,我们新建Subject

@Entity
@Table(name = "subject")
public class Subject { @Id @GeneratedValue private Integer id; @Column(length = 10) private String name; //省略get/set } 分析可以知道,Student仍然是关系的主题,所以我们需要在Subject类中标注它在Student类中的名称。 

Student:

  @ManyToManyprivate List<Subject> subjects;

Subject:

  @ManyToMany(mappedBy = "subjects")private List<Student> students;

转载于:https://www.cnblogs.com/JAYIT/p/8566267.html

jpa关联映射(一)相关推荐

  1. JavaEE(14) - JPA关联映射

    1. 单向N-1关联映射 2. 单向1-1关联映射 3. 单向1-N关联映射 4. 单向N-N关联映射 5. 双向1-1关联映射 6. 双向1-N关联映射 7. 双向N-N关联映射 1. 单向N-1关 ...

  2. JPA关系映射系列一:one-to-one外键关联

    2019独角兽企业重金招聘Python工程师标准>>> SpringDataJPA是Spring Data的一个子项目,通过提供基于JPA的Repository极大的减少了JPA作为 ...

  3. NHibernate从入门到精通系列(7)——多对一关联映射

    内容摘要 多对一关联映射概括 多对一关联映射插入和查询 多对一关联映配置介绍 一.多对一关联映射概括 关联关系是实体类与实体类之间的结构关系,分别为"多对一"."一对一& ...

  4. [置顶] Hibernate从入门到精通(十)多对多单向关联映射

    上一篇文章Hibernate从入门到精通(九)一对多双向关联映射中我们讲解了一下关于一对多关联映射的相关内容,这次我们继续多对多单向关联映射. 多对多单向关联映射 在讲解多对多单向关联映射之前,首先看 ...

  5. [置顶] Hibernate从入门到精通(十一)多对多双向关联映射

    上次我们在中Hibernate从入门到精通(十)多对多单向关联映射讲解了一下多对多单向关联映射,这次我们讲解一下七种映射中的最后一种多对多双向关联映射. 多对多双向关联映射 按照我们之前的惯例,先看一 ...

  6. 【Java Web开发指南】Mybatis一对多关联映射

    文章目录 1 嵌套查询 2 嵌套结果 1 嵌套查询 <select id="findUserWithOrders2" parameterType="Integer& ...

  7. Hibernate(九)一对多双向关联映射

    上次的博文Hibernate从入门到精通(八)一对多单向关联映射中,我们讲解了一下一对多单向映射的相关 内容,这次我们讲解一下一对多双向映射的相关内容. 一对多双向关联映射 一对多双向关联映 射,即在 ...

  8. Hibernate从入门到精通(十)多对多单向关联映射

    上一篇文章Hibernate从入门到精通(九)一对多双向关联映射中我们讲解了一下关于一对多关联映射的相关内容,这次我们继续多对多单向关联映射. 多对多单向关联映射 在讲解多对多单向关联映射之前,首先看 ...

  9. 02 - Unit010:关联映射

    关联映射 什么是? 数据库中有关联关系的表,通过实体对象引用的方式体现出来,叫关联映射. 为什么? 将多表的记录封装成实体对象. 何时用? 对数据库中的表进行多表查询时. 怎么用? cn_user-- ...

最新文章

  1. Spring Security原理之springSecurityFilterChain
  2. ASP.NET上传文件对文件类型的高级判断
  3. php多个参数伪静态,伪静态技术与页面多参数传送的处理办法
  4. std::string 用法
  5. List,Set和Map详解及其区别和他们分别适用的场景
  6. caffe使用ctrl-c不能保存模型
  7. linux vmware硬盘,给vmware的Linux虚拟机增添硬盘
  8. 八邻域轮廓跟踪算法_结合mRMR选择和IFCM聚类的遥感影像分类算法
  9. c语言递归算法实验报告,递归算法实验报告.docx
  10. STM32L之可编程电压检测(PVD)
  11. php继承exten,es6,extends_react中通过extend继承,父组件为什么能访问子组件的属性,es6,extends,react.js - phpStudy...
  12. Python为什么要self
  13. 如何实现远程给PLC上下载程序?
  14. 极化码理论及算法研究3-Arikan原版论文学习总结
  15. java实现ftl文件转图片
  16. 深入学习ElasticSearch(四)——mapping的详细讲解
  17. 微信小程序申请发布流程
  18. SQL中的随机函数-笔记
  19. 荣耀7升级android8,华为+荣耀7款老爷机齐升安卓8.0:最近两年全覆盖
  20. 最积极的搜索引擎蜘蛛有哪些可以屏蔽掉

热门文章

  1. docker安装nexus3命令
  2. go基本语法:channel未关闭遍历结束后会报错deadlock
  3. docker安装redis并设置密码
  4. Linux tar将分割的小文件进行合并
  5. Scala中的四种访问权限
  6. Rancher添加主机docker命令
  7. Linux 用户管理相关命令
  8. 没有shell63号单元_苏教版15年级数学上册第七单元整理与复习+同步练习
  9. 红米airdots掉了怎么查找_红米K30至尊版与realmeX7 Pro,两款性价比手机,谁才是第一位...
  10. mysql通过命令创建数据库和导入数据库