开发中常用到数据表的关联(其实很难遇到。。),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. jsp页面的el表达式取数据

    在jsp页面去Id时候要照上面的方式取,不能照下面的方式取:

  2. js元素绑定事件

    想给一个元素绑定一个方法之后,在绑定一个方法而且不被覆盖 window.onload = function () { alert('a'); } window.onlaod=function(){ a ...

  3. DirectoryEntry 账户启动与停用 以及创建账户等

    启动账户: DirectoryEntry usr = new DirectoryEntry("LDAP://CN=New User,CN=users,DC=fabrikam,DC=com&q ...

  4. MFC 无边框窗体实现用鼠标拖动窗体边缘实现窗体大小变化

    无边框窗体如何实现用鼠标拖动窗体边缘实现窗体大小变动呢?下面介绍一种方法,通过以下几个步骤即可实现: 1.实现WM_NCHITTEST消息,实现四条边框的模拟 2.实现WM_NCLBUTTONDOWN ...

  5. nodejs基础 -- 回调函数

    Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都 ...

  6. Python如何输出包含在对象中的中文字符?

    >>> bb = {'classes': ['\xe5\xb0\x96\xe6\xa4\x92\xe5\x9c\x9f\xe8\xb1\x86\xe4\xb8\x9d', '\xe5 ...

  7. IOS 命令行编译

    转自:简书 IOS 命令行编译   发表于 IOS2013-08-17 07:07 字数: 583 阅读量: 61 This document will note about the ios comm ...

  8. SQL Server 查询数据库表的列数

    select count(*) from sysobjects a join syscolumns b on a.id=b.id where a.name='表名' go

  9. 生成验证码程序C#

    using System; using System.Data; using System.Configuration; using System.Collections; using System. ...

  10. 50个Android开发技巧(03 自己定义ViewGroup)

    问题:怎样创建一个例如以下图所看到的的布局?                图1 (原文地址:http://blog.csdn.net/vector_yi/article/details/244155 ...