开发中常用到数据表的关联(其实很难遇到。。),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:

  @OneToOne
private Student student;

Student:

  @OneToOne
private 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,并且指定关系是多对一

  @ManyToOne
private 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:

  @ManyToMany
private List<Subject> subjects;

Subject:

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

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关联映射

    参考:http://www.cnblogs.com/printN/p/6408818.html 官方文档:http://docs.jboss.org/hibernate/orm/5.2/usergui ...

  3. hibernate之关于使用连接表实现多对一关联映射

    [Hibernate]之关于使用连接表实现多对一关联映射 在我们项目使用中採用中间表最多的一般就是多对一,或者是多对多,当然一对一使用中间表也是能够的,可是这样的几率通常少之又少!所以这里重点介绍多对 ...

  4. Hibernate框架--关联映射,一对多,多对多 inverse cascade

    回顾Hibernate: 1. hibernate开发环境搭建 ----> 引入jar: hibernate.jar + required + jpa + 驱动包 ---> hiberna ...

  5. Hibernatel框架关联映射

    Hibernatel框架关联映射 Hibernate程序执行流程: 1.集合映射 需求:网络购物时,用户购买商品,填写地址 每个用户会有不确定的地址数目,或者只有一个或者有很多.这个时候不能把每条地址 ...

  6. hibernate多对多关联映射

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

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

    (1).编写配置文件 Hibernate通过读写默认的XML配置文件hibernate.cfg.xml加载数据库配置信息.代码如下: <hibernate-configuration> & ...

  8. Java三大框架之——Hibernate关联映射与级联操作

    什么是Hibernate中的关联映射? 简单来说Hibernate是ORM映射的持久层框架,全称是(Object Relational Mapping),即对象关系映射. 它将数据库中的表映射成对应的 ...

  9. Hibernate关联映射 映射文件的配置

    一:多对一单向关联 首先我们必须创建两个实体类 例如:Dept类 public class Dept { private Integer deptNo; private String dName; p ...

随机推荐

  1. java.lang.UnsatisfiedLinkError: No implementation found for int com.xxx.xx中的couldn’t find “XX.so”或loadLibrary("xxx")失败

    我觉得这是个神坑,虽然早几年网上就很多po出来的解决方式,但是同样的问题,我的bug却稳如泰山,一点用都没有,好气 下面总结一下 这里前面先是有个系统打印信息 I/System.out: loadLi ...

  2. jQuery实现点击单选按钮切换选中状态效果

    实现效果:第一次点击单选按钮时选中该按钮,再次点击时取消选中该单选按钮. 关键就是要将单选按钮原来的值保存起来,第二次点击时.如果原来选中则取消,否则选中. 看代码吧,是用jQuery实现的,功能虽小 ...

  3. Ubuntu创建新用户并增加管理员权限 删除某个用户

    sudo adduser xxx 这样的命令会在home目录下添加一个帐号sudo useradd xxx 仅仅是添加用户, 不会在home目录添加帐号 删除:终端方法:以下用newuser代替想要删 ...

  4. android Menu 笔记

    菜单是应用中常见的用户组件.本文介绍如何在布局文件和代码中添加menu,submenu以及在代码中添加的方法. 参考链接 https://developer.android.com/guide/top ...

  5. e667. 在给定图像中创建缓冲图像

    An Image object cannot be converted to a BufferedImage object. The closest equivalent is to create a ...

  6. CentOS系统资源常用命令

    系统: # uname -a   # 查看内核/操作系统/CPU信息 # cat /etc/issue # cat /etc/redhat-release # 查看操作系统版本 # cat /proc ...

  7. php多语言截取字符串函数

    <?php header("Content-Type:text/html;charset=utf-8"); function msubstr($str, $start = 0 ...

  8. [转]NMON服务器监控、指标说明

    一.NMON中的各项参数指标: SYS_SUMM:显示当前服务器的总体性能情况 Total System I/OStatistics:Avg tps during an interval:显示采集间隔 ...

  9. 制作一款3D炸弹超人游戏

    说起炸弹超人,相信很多朋友都玩过类似的游戏,其中最为人熟知的莫过于<泡泡堂>.该类型游戏需要玩家在地图中一边跑动一边放置炸弹,同时还要躲避敌方炸弹保护自己.最初的炸弹超人游戏都是2D的,今 ...

  10. Unity3D工程源码目录

    2-0    暗黑破坏神3 链接:http://pan.baidu.com/s/1dEAUZoX 密码:cly4 2-1    炉石传说 客户端加服务器端 链接:http://pan.baidu.co ...