Hibernate 关联映射 多对多
来源:互联网 发布:手机淘宝进入二手市场 编辑:程序博客网 时间:2024/05/16 06:06
Hibernate 关联映射 多对多
多对多
多对多(teacher - student)
在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使用中最好转换成一对多的对象模型;Hibernate会为我们创建中间关联表,转换成两个一对多。
<set name="teacher" table="teacher_student">
<key column="teacher_id"/>
<many-to-many class="Student" column="student_id"/>
</set>
单向多对多
大学生和课程之间的关联就是多对多关联。
对应的持久化代码:
1)Course类
/**课程实体类*/
public class Course{
private Long id;//对象标示符
private String name;//姓名
private Double creditHours;//课时数
public Course(){}//无参构造方法
//以下为所有属性的getter和setter方法….
}
2)Student类
/**学生实体类*/
public class Student{
private long id ;//对象标示符
private String name;//姓名
private String grade;//所在班级
private Set<Course>coursep;//所有所选课程的集合
public Student(){}//无参构造方法
//以下为所有属性的getter和setter方法
}
在关系模型中,是无法直接表达两个表之间的多对多的关联的。需要有一个中间的连接表,在连接表中用外键关联到两个表中。
上面两个持久化类的映射文件如下。
Course.hbm.xml
<?xml version=”1.0” encoding=”UTF-8”>
<!DOCTYPE hibernate-mapping PUBLIC
“-//Hibernate/Hibernate Mapping DTD 3.0//EN”
http://hibernate.sourceforge.net//hibernate-mapping-3.0.dtd>
</hibernate-mapping>
<!—映射持久化类-->
<class name=”com.qiujy.domain.Course” table=”course”>
<!—映射对象标示符-->
<id name=”id” column=”id” type=”long”><generator class=”native”/></id>
<!--映射普通属性-->
<prooerty name=”name”/>
<property name=”creditHours” column=”credit_Hours”/>
</class>
</hibernate-mapping>
Student.hbm.xml
<?xml version=”1.0” encoding=”UTF-8”?>
<!DOCTYPE hibernate-mapping PUBLIC
“-//Hibernate/Hibernate Mapping DTD 3.0//EN”
“http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd”
>
<hibernate-mapping>
<!--持久化类-->
<class name=”com.qiujy.domian.Student” table=”student”>
< --映射标示符 -- >
<id name=”id” column=”id” type=”long”><generator class=”native”/></id>
< -- 映射普通属性 -- >
<property name=”name”/>
<property name=”grade”/>
<! –映射集合属性,指定连接表 -- >
<set name=”course” table=”student_course”>
< --用key元素指定本持久类在连接表中的外键名 -- >
<key column=”student_id”/>
<! – 映射多对多关联 -- >
<many-to-many column=”course_id” class=”com.qiujy.domain.Course”/>
</set>
</class>
</hibernate-mapping>
在Student.hbm.xml类中用set映射了集合属性course,同时指定了中间的连接表是student_course表,指定了在连接表中Student的外键名实student_id,关联的是Course在连接表中的外建明是course_id。
双向多对多
对应的持久化类
/**学生实体类*/
pblic class Student{
private long id;//对象标示符
private String name;//姓名
private String grade;//所属班级
private Set<Course> course;//所有所选课程的集合
public Student(){}//无参构造方法
//以下为所有属性的getter和setter方法…..
}
Course类
/**课程实体类*/
public class Course{
private long id/对象标示符
private String name;//课程名
private Double creditHours;//课时数
Private Set<Student> students;//选择了这门课程的学生的集合
Public Course(){}//无参构造方法
//所有属性的getter和setter方法
}
这两个持久化类的映射文件
Student.hbm.xml
<?xml version=”1.0” encoding=”UTF-8”?>
<!DOCTYPE hibernate-mapping PUBLIC
“-//Hibernate//Hibernate Mapping DTD 3.0//EN”
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd>
<hibernate-mapping>
< ! – 持久化映射类 -- >
<class name=”com.qiujy.domain.Student” table=”student”>
<! --- 映射对象标示符 --- >
<id name=”id” column=”id” type=”long”><generator class=”native”/></id>
<! ---映射普通属性 -- >
<property name=”name”/>
<property name=”grade”/>
<!—映射集合属性,指定连接表 -- >
<set name=”course” table=”student_course”>
<! – 用key元素指定持久化类在连接表中的外键字段名 -- >
<key column=”student_id”/>
<!-- 映射多对多关联类 à
<many-to-many column=”course_id” class=”com.qiujy.domain.Course”/>
</set>
</class>
</hibernate-mapping>
Course.hbm.xml
<?xml version=”1.0” encoding=”UTF-8”?>
<!DOCTYPE hibernate-mapping PUBLIC
“-//Hibernate/Hibernate Mapping DTD 3.0//EN”
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd>
<hibernate-mapping>
<!—映射持久化类 -- >
<class name=”com.qiujy.domain.Course” table=”course”>
<! – 映射对象标示符 -- >
<id name=”id” column=”id” type=”long”><generator class=”native”/></id>
<! --映射普通属性 -->
<property name=”name”/>
<property name=”creditHours” column=”credit_hours”/>
<!—映射集合属性,指定连接表 -- >
<set name=”student” table=”student_course” inverse=”ture”>
<! --用key元素指定持久化类在连接表中的外键字段名 -- >
<key column=”corse_id”/>
<!—映射多对多关联 -- >
<many-to-many column=”student-id” class=”com.qiujy.domain.Student”/>
</set>
</class>
</hibernate-mapping>
在双向多对多映射中,最好要在某一端的集合属性映射上设置inverse=”ture”,这样明确地告诉Hibernate,让另一端负责连接表的更新。这样会有更好地性能。
- Hibernate关联映射-----多对多关联
- Hibernate关联映射--多对一映射
- 【Hibernate框架】关联映射(多对多关联映射)
- Hibernate关联映射之一对多单向关联映射
- Hibernate关联映射之多对多单/双向关联映射
- Hibernate关联关系映射(多对一关联映射)
- Hibernate多对多双向关联映射
- Hibernate 关联映射 多对多
- hibernate关联映射中的多对多
- hibernate---->多对多关联映射
- Hibernate多对多关联映射
- Hibernate 映射多对多关联关系
- 【Hibernate】多对多关联映射
- Hibernate 映射多对多关联关系
- 【Hibernate】多对多关联映射
- Hibernate关联关系映射---多对多
- Hibernate映射多对多关联关系
- Hibernate 多对多关联映射配置
- 在Eclipse中使用Hibernate插件
- ubuntu11 下安装86五笔输入法
- JPA 简单应用 学习
- linux 内核编译选项详解
- as3 zlib jpg
- Hibernate 关联映射 多对多
- 分析影响手机游戏未来走向的5大因素
- VC6中使用COM库的三种方法
- finally不一定总是执行
- EZ Gui 创建Button
- 计算字符的长度,汉字的长度
- php and as3 通信原型
- FileAction 类是 oschina 后台用于文件库的管理,包括上传、编辑、删除和下载功能
- 插入排序