Hibernate框架学习(三) 关系映射
2016-04-21 09:12
495 查看
hibernate中关系映射指的是实体类与实体类间的关系。和数据库中表与表之间的关系类似,有一对一,多对一,一对多,多对多四种映射关系。
一:一对一映射
两个对象之间是一对一的关系,如人和身份证之间是一对一的关系。
实现一对一映射有两种方式,一种是主键约束,一种是外键约束
1,主键约束
数据库表不会有额外的字段维护他们之间的关系,仅通过表的主键来关联
1)对象模型
![](https://oscdn.geek-share.com/Uploads/Images/Content/201704/6f7730c5504126c427bc75b7b5af361d)
2)关系模型
![](https://oscdn.geek-share.com/Uploads/Images/Content/201704/6f7730c5504126c427bc75b7b5af361d)
2,外键约束
在一种一个对象中加入另一个对象的属性
1)对象模型
![](https://oscdn.geek-share.com/Uploads/Images/Content/201704/6f7730c5504126c427bc75b7b5af361d)
2)关系模型
![](https://oscdn.geek-share.com/Uploads/Images/Content/201704/6f7730c5504126c427bc75b7b5af361d)
3)xml中配置
由于IDCard 身份证实体类是被引入,它的配置文件不发生变化,Person类的配置文件中需要做相应配置,又由于在人的一段能看到卡的信息,配置信息时,需要注意在引入的一方使用many-to-one标签
![](https://oscdn.geek-share.com/Uploads/Images/Content/201704/6f7730c5504126c427bc75b7b5af361d)
主要:many-to-one标签中的name属性是IDCard对象主键字段前面加上get字段。
二:多对一
多对一映射,如学生和班级之间的关系,多个学生对应一个班级。
1, 对象模型中是在多的一方对象中加入一的一方对象的引用。配置文件参见上图所示。
2,注解使用
[java] view
plain copy
print?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
@Entity
public class Person {
private int id;
private String name;
private IDCard cid;
@ManyToOne
@JoinColumn(name="cardid")
public IDCard getcid() {
return cid;
}
用@JoinColumn来指定外键的字段名
三:一对多
一对多的映射,如班级和学生的关系,一个班级中有多个学生。
1,对象模型中是在一的一端添加Set集合,包含多的一端。
[java] view
plain copy
print?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
public class Classes{
private int cid ;
private String cname ;
<strong>private Set<Student> studentSet = new HashSet<Student>(); /</strong>/一对多
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public Set<Student> getStudentSet() {
return studentSet;
}
public void setStudentSet(Set<Student> studentSet) {
this.studentSet = studentSet;
}
}
2,配置文件
1)在多的一端课程,使用set标签并使用one-to-many标签
![](https://oscdn.geek-share.com/Uploads/Images/Content/201704/6f7730c5504126c427bc75b7b5af361d)
2)在一的一端学生,使用many-to-one标签
![](https://oscdn.geek-share.com/Uploads/Images/Content/201704/6f7730c5504126c427bc75b7b5af361d)
3,注解
[html] view
plain copy
print?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
@OneToMany//进行注解为一对多的关系
@JoinColumn(name="classesId")//在多的一端注解一个字段(名为classessid)
public Set<Student> getStudents() {
return students;
}
在set集合属性的get方法前面使用@OneToMany注解
三:多对多
多对多映射关系,还拿学生课程关系,多个学生对应多个课程,多个课程对应多个学生
1,在对象模型中是双方都加入set集合
2,xml配置文件中,双方也都用set标签和many-to-many标签
3,注解
[java] view
plain copy
print?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
@ManyToMany
@JoinTable(name="t_s_c",//使用@JoinTable标签的name属性注解第三方表名称
joinColumns={@JoinColumn(name="courseId")},
//使用joinColumns属性来注解当前实体类在第三方表中的字段名称并指向该对象
inverseJoinColumns={@JoinColumn(name="studentId")}
//使用inverseJoinColumns属性来注解当前实体类持有引用对象在第三方表中的字段名称并指向被引用对象表
)
public Set<Student> getStudents() {return Students;}
一:一对一映射
两个对象之间是一对一的关系,如人和身份证之间是一对一的关系。
实现一对一映射有两种方式,一种是主键约束,一种是外键约束
1,主键约束
数据库表不会有额外的字段维护他们之间的关系,仅通过表的主键来关联
1)对象模型
2)关系模型
2,外键约束
在一种一个对象中加入另一个对象的属性
1)对象模型
2)关系模型
3)xml中配置
由于IDCard 身份证实体类是被引入,它的配置文件不发生变化,Person类的配置文件中需要做相应配置,又由于在人的一段能看到卡的信息,配置信息时,需要注意在引入的一方使用many-to-one标签
主要:many-to-one标签中的name属性是IDCard对象主键字段前面加上get字段。
二:多对一
多对一映射,如学生和班级之间的关系,多个学生对应一个班级。
1, 对象模型中是在多的一方对象中加入一的一方对象的引用。配置文件参见上图所示。
2,注解使用
[java] view
plain copy
print?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
@Entity
public class Person {
private int id;
private String name;
private IDCard cid;
@ManyToOne
@JoinColumn(name="cardid")
public IDCard getcid() {
return cid;
}
用@JoinColumn来指定外键的字段名
三:一对多
一对多的映射,如班级和学生的关系,一个班级中有多个学生。
1,对象模型中是在一的一端添加Set集合,包含多的一端。
[java] view
plain copy
print?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
public class Classes{
private int cid ;
private String cname ;
<strong>private Set<Student> studentSet = new HashSet<Student>(); /</strong>/一对多
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public Set<Student> getStudentSet() {
return studentSet;
}
public void setStudentSet(Set<Student> studentSet) {
this.studentSet = studentSet;
}
}
2,配置文件
1)在多的一端课程,使用set标签并使用one-to-many标签
2)在一的一端学生,使用many-to-one标签
3,注解
[html] view
plain copy
print?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
@OneToMany//进行注解为一对多的关系
@JoinColumn(name="classesId")//在多的一端注解一个字段(名为classessid)
public Set<Student> getStudents() {
return students;
}
在set集合属性的get方法前面使用@OneToMany注解
三:多对多
多对多映射关系,还拿学生课程关系,多个学生对应多个课程,多个课程对应多个学生
1,在对象模型中是双方都加入set集合
2,xml配置文件中,双方也都用set标签和many-to-many标签
3,注解
[java] view
plain copy
print?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
@ManyToMany
@JoinTable(name="t_s_c",//使用@JoinTable标签的name属性注解第三方表名称
joinColumns={@JoinColumn(name="courseId")},
//使用joinColumns属性来注解当前实体类在第三方表中的字段名称并指向该对象
inverseJoinColumns={@JoinColumn(name="studentId")}
//使用inverseJoinColumns属性来注解当前实体类持有引用对象在第三方表中的字段名称并指向被引用对象表
)
public Set<Student> getStudents() {return Students;}
相关文章推荐
- Hibernate Oracle sequence的使用技巧
- jsp Hibernate批量更新和批量删除处理代码
- jsp hibernate的分页代码第1/3页
- Struts2+Hibernate实现数据分页的方法
- Hibernate环境搭建与配置方法(Hello world配置文件版)
- JAVA+Hibernate 无限级分类
- SSH整合中 hibernate托管给Spring得到SessionFactory
- jsp hibernate 数据保存操作的原理
- hibernate中的增删改查实现代码
- 解决hibernate+mysql写入数据库乱码
- java优化hibernate性能的几点建议
- java Hibernate延迟加载
- hibernate 常用方法介绍
- 详解Java的Hibernate框架中的注解与缓存
- 浅析Java的Hibernate框架中的继承关系设计
- Hibernate实现批量添加数据的方法
- JQuery+Ajax+Struts2+Hibernate框架整合实现完整的登录注册
- 深入理解Hibernate中的flush机制
- 简要分析Java的Hibernate框架中的自定义类型
- 简单的手工hibernate程序示例