Hibernate 关联关系映射实例
双向多对一/一对多(many-to-one/one-to-many)
例子,多个学生对应一个班级,一个班级对应多个学生:
班级类,Grade.java:
public class Grade {
private Integer id;
private String name;
private String description;
//学生集合
private Set<Student> students = new HashSet<Student>();
//省略get,set方法......
}
学生类,Student.java
public class Student {
private Integer id;
private String name;
private String sex;
//班级引用
private Grade grade;
//省略get,set方法.......
}
班级类(一的一方)映射文件,Grade.hbm.xml:
<hibernate-mapping package="accp.hib">
<class name="Grade" table="Grade" >
<id name="id" column="id">
<generator class="native" />
</id>
<property name="name" column="name" type="string" />
<property name="description" type="string" column="description" />
<!-- 映射学生类集合 -->
<set name="students" inverse="true">
<key column="grade_id" />
<one-to-many class="Student"/>
</set>
</class>
</hibernate-mapping>
学生类(多的一方)映射文件,Student.hbm.xml:
<hibernate-mapping package="accp.hib">
<class name="Student" table="Student">
<id name="id" column="id">
<generator class="native" />
</id>
<property name="name" column="name" type="string" />
<property name="sex" type="string" column="sex" />
<!-- 映射班级类引用 -->
<many-to-one name="grade" class="Grade" column="grade_id" cascade="save-update"/>
</class>
</hibernate-mapping>
双向一对一(One-to-one)
例子,一个学生对应一个学生证,一个学生证对应一个学生:
学生类,Student.java
public class Student {
private Integer id;
private String name;
private String sex;
//学生证类 引用
private Paper paper;
//省略get,set方法......
}
学生证类,Paper.java
public class Paper {
private Integer id;
private String description;
//学生类引用
private Student student;
//省略get,set方法.....
}
学生类(无外键一方)映射文件,Student.hbm.xml:
<hibernate-mapping package="accp.hib">
<class name="Student" table="Student">
<id name="id" column="id">
<generator class="native" />
</id>
<property name="name" column="name" type="string" />
<property name="sex" type="string" column="sex" />
<!-- 映射学生证类 -->
<one-to-one name="paper" class="Paper" />
</class>
</hibernate-mapping>
学生证类(有外键一方)映射文件,Paper.hbm.xml:
<hibernate-mapping package="accp.hib">
<class name="Paper" table="Paper" >
<id name="id" column="id">
<generator class="native" />
</id>
<property name="description" type="string" column="description" />
<!-- 映射学生类 -->
<many-to-one name="student" column="student_id" class="Student" unique="true" cascade="save-update"/>
</class>
</hibernate-mapping>
要数据库中,外键会建立在写有 many-to-one 所映射的表中,也就是paper类所映射的表。
双向多对多(many-to-many)
例子,多个学生对应多门课程,多门课程也对应多个学生:
学生类,Student.java
public class Student {
private Integer id;
private String name;
private String sex;
//课程类集合
private Set<Course> courses = new HashSet<Course>();
//省略get,set方法.......
}
课程类,Course.java
public class Course {
private Integer id;
private String name;
//学生类集合
private Set<Student> students = new HashSet<Student>();
//省略get,set方法.......
}
学生类映射文件,Student.hbm.xml:
<hibernate-mapping package="accp.hib">
<class name="Student" table="Student">
<id name="id" column="id">
<generator class="native" />
</id>
<property name="name" column="name" type="string" />
<property name="sex" type="string" column="sex" />
<!-- 映射课程类集合 -->
<set name="courses" table="sc">
<key column="student_id" />
<many-to-many column="course_id" class="Course"/>
</set>
</class>
</hibernate-mapping>
课程类映射文件,Course.hbm.xml:
<hibernate-mapping package="accp.hib">
<class name="Course" table="Course" >
<id name="id" column="id">
<generator class="native" />
</id>
<property name="name" column="name" type="string" />
<!-- 映射学生类集合 -->
<set name="students" table="sc" inverse="true">
<key column="course_id" />
<many-to-many column="student_id" class="Student" />
</set>
</class>
</hibernate-mapping>
会新建一张名为 sc 的中间表,该表拥有student和course的外键,通过该中间表为student和course建立多对多关系。
Hibernate 关联关系映射实例的更多相关文章
- Hibernate关联关系映射
1. Hibernate关联关系映射 1.1. one to one <class name="Person"> <id name="id" ...
- Hibernate关联关系映射之一对一关联关系
人和身份证之间就是一个典型的一对一关联关系.实现一对一关联关系映射的方式有两种一种是基于外键,一种是基于主键,下面我们先看基于外键的关联方式 首先看他们的实体类 Person类 ? 1 2 3 4 5 ...
- hibernate关联关系映射详解
词汇解释 关系:事物之间相互作用.相互联系的状态.范围最大. 联系:在关系数据库中表示实体与实体之间的联系,1:1,1:n,m:n. 关联:表示对象之间的关系,既有数量性,又有方向性:动词:将对象之间 ...
- hibernate关联关系映射之配置文件
词汇解释 关系:事物之间相互作用.相互联系的状态.范围最大. 联系:在关系数据库中表示实体与实体之间的联系,1:1,1:n,m:n. 关联:表示对象之间的关系,既有数量性,又有方向性:动词:将对象之间 ...
- 1-7 hibernate关联关系映射
1.关联关系分为单向关联(一对一,一对多,多对一,多对多),多向关联(一对一,一对多,多对多). 2.单向一对一主键关联实例 需要为one-to-one元素指定constrained属性值为true. ...
- Hibernate关联关系映射之一对多双向映射
一对多映射有两种,一种是单向的,另一种的多向.我们一般是使用双向的,所以我就写写一对多的双向映射. 还是想昨天一样举个例子来说明:作者<===>作品,还是对数据进行增删改查. 我们一般是把 ...
- Hibernate关联关系映射之一对一(主键关联)
在业务成的域模型中,类和类之间最普遍的关系就是关联关系,而关联也是有方向的. 就以例子来说明:一个人对应一张身份证.对其进行增删改. 对于人在数据创建表的时候,我们就给他两个字段,一个是id号,一个就 ...
- Hibernate学习笔记(3)---hibernate关联关系映射
一对一关联 假设有两个持久化类(实体类)User与Address,它们之间存在一对一的关系 1,通过主键关联(个人偏向另外一种) User.hbm.xml文件配置 <id name=" ...
- hibernate学习四 hibernate关联关系映射
在Hibernate中对象之间的关联关系表现为数据库中表于表之间的关系(表之间通过外键关联). 1 单向的一对一 主键关联 外键关联 2 单向的一对多 3 单向的多对一 4 单向的多对多 5 双向的 ...
随机推荐
- JS正则表达式收集篇
1.验证只可输入整数或小数点后两位的数字:/^([1-9]{1}|[1-9]{1}[0-9])+(.[1-9]{1,2})?$/ 2.验证Email: /^([a-zA-Z0-9]+[_|\_|\.] ...
- android 注释常用标签
javadoc: {@link ActivityGroup} 链接到包.类: {@link #setContentView} 用#链接到类成员: @return View The current ...
- NSBundle 类
NSBundle NSBundle继承于NSObject,NSBundle是一个程序包,其中包含了程序会使用的资源(图像,声音,编辑好的代码,nib文件). 一. 初始化NSBundle + (ins ...
- 2015.4.2-SQL 简单语句(一)
1.创建一个student表 create table student_masen( sno char(4) not null primarykey sname nchar(10) not null ...
- [转]如何正确设置nginx中remote_addr和x_forwarded_for参数
做网站时经常会用到remote_addr和x_forwarded_for这两个头信息来获取客户端的IP,然而当有反向代理或者CDN的情况下,这两个值就不够准确了,需要调整一些配置. 什么是remote ...
- MVC4商城项目四:应用Bundle捆绑压缩技术
从MVC4开始,我们就发现,项目中对Global.asax进行了优化,将原来在MVC3中使用的代码移到了[App_Start]文件夹下,而Global.asax只负责初始化.其中的BundleConf ...
- 十一、外观(Facade)模式--结构模式(Structural Pattern)
外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是门面模式.门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的门面(Facade)对象进行. 门面模式提供一个高层次 ...
- USB系列之七:ASPI介绍及命令测试
在以前的一篇博文<关于构建DOS下编程平台的总结>中曾经介绍了一种在DOS下驱动U盘的方法,我们大致回顾一下.在config.sys中加入两个驱动程序,就可以驱动U盘:device = a ...
- NFC应用(二)读写器模式
NFC第二种应用场境就是所谓的读写器模式.既然有卡,当然就会有读写器,这两种模式是配合在一起使用的.两个卡放一起不能通信,两个读写器模式的设备也不能通信. NFC读写器一般支持以下一种或多种协议:Mi ...
- eclipse的优化 gc.log
原帖:http://www.javaeye.com/topic/756538 性能优化从身边做起. 首先建立评估体系,将workspace里所有的项目close掉,关闭eclipse.优化的用例就是启 ...