jpa关联映射(一)
开发中常用到数据表的关联(其实很难遇到。。),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关联映射(一)的更多相关文章
- 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关 ...
- jpa关联映射
参考:http://www.cnblogs.com/printN/p/6408818.html 官方文档:http://docs.jboss.org/hibernate/orm/5.2/usergui ...
- hibernate之关于使用连接表实现多对一关联映射
[Hibernate]之关于使用连接表实现多对一关联映射 在我们项目使用中採用中间表最多的一般就是多对一,或者是多对多,当然一对一使用中间表也是能够的,可是这样的几率通常少之又少!所以这里重点介绍多对 ...
- Hibernate框架--关联映射,一对多,多对多 inverse cascade
回顾Hibernate: 1. hibernate开发环境搭建 ----> 引入jar: hibernate.jar + required + jpa + 驱动包 ---> hiberna ...
- Hibernatel框架关联映射
Hibernatel框架关联映射 Hibernate程序执行流程: 1.集合映射 需求:网络购物时,用户购买商品,填写地址 每个用户会有不确定的地址数目,或者只有一个或者有很多.这个时候不能把每条地址 ...
- hibernate多对多关联映射
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- Hibernate一对多单向(双向)关联映射
(1).编写配置文件 Hibernate通过读写默认的XML配置文件hibernate.cfg.xml加载数据库配置信息.代码如下: <hibernate-configuration> & ...
- Java三大框架之——Hibernate关联映射与级联操作
什么是Hibernate中的关联映射? 简单来说Hibernate是ORM映射的持久层框架,全称是(Object Relational Mapping),即对象关系映射. 它将数据库中的表映射成对应的 ...
- Hibernate关联映射 映射文件的配置
一:多对一单向关联 首先我们必须创建两个实体类 例如:Dept类 public class Dept { private Integer deptNo; private String dName; p ...
随机推荐
- jsp页面的el表达式取数据
在jsp页面去Id时候要照上面的方式取,不能照下面的方式取:
- js元素绑定事件
想给一个元素绑定一个方法之后,在绑定一个方法而且不被覆盖 window.onload = function () { alert('a'); } window.onlaod=function(){ a ...
- DirectoryEntry 账户启动与停用 以及创建账户等
启动账户: DirectoryEntry usr = new DirectoryEntry("LDAP://CN=New User,CN=users,DC=fabrikam,DC=com&q ...
- MFC 无边框窗体实现用鼠标拖动窗体边缘实现窗体大小变化
无边框窗体如何实现用鼠标拖动窗体边缘实现窗体大小变动呢?下面介绍一种方法,通过以下几个步骤即可实现: 1.实现WM_NCHITTEST消息,实现四条边框的模拟 2.实现WM_NCLBUTTONDOWN ...
- nodejs基础 -- 回调函数
Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都 ...
- Python如何输出包含在对象中的中文字符?
>>> bb = {'classes': ['\xe5\xb0\x96\xe6\xa4\x92\xe5\x9c\x9f\xe8\xb1\x86\xe4\xb8\x9d', '\xe5 ...
- IOS 命令行编译
转自:简书 IOS 命令行编译 发表于 IOS2013-08-17 07:07 字数: 583 阅读量: 61 This document will note about the ios comm ...
- SQL Server 查询数据库表的列数
select count(*) from sysobjects a join syscolumns b on a.id=b.id where a.name='表名' go
- 生成验证码程序C#
using System; using System.Data; using System.Configuration; using System.Collections; using System. ...
- 50个Android开发技巧(03 自己定义ViewGroup)
问题:怎样创建一个例如以下图所看到的的布局? 图1 (原文地址:http://blog.csdn.net/vector_yi/article/details/244155 ...