Hibernate映射关系之多对多关系映射
来源:互联网 发布:软件学校咨询电话 编辑:程序博客网 时间:2024/05/22 15:03
public class Student {
private Integer id; //ID,唯一标识
private String studentName; //学生姓名
private Set teachers = new HashSet(); //关系集合
...省略getter、setter以及构造方法
}
public class Teacher {
private Integer id; //ID,唯一标识
private String teacherName; //教师姓名
...省略getter、setter以及构造方法
}
映射文件
Student.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Student" table="student">
<id name="id" type="int">
<column name="id"/>
<generator class="increment" />
</id>
<property name="studentName" type="string" />
<set name="teachers" table="studentTeacher" lazy="true" cascade="save-update">
<key column="student_id"/>
<many-to-many class="Teacher" column="teacher_id"/>
</set>
</class>
</hibernate-mapping>
说明<set>里的子标签,key标签表明了在studentTeacher表中引用当前类对应表的主键的外键名。换句话说,表明了studentTeacher里哪一列引用了当前类对应表的主键,<many-to-many>标签说明多对多关系的另一方是哪个类,关系表中哪一列引用了另一方的主键。
Teacher.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Teacher" table="teacher" >
<id name="id" type="int">
<column name="id" />
<generator class="increment"/>
</id>
<property name="teacherName" type="string"/>
</class>
</hibernate-mapping>
双向关联:下面的POJO类都省略了getter和setter以及构造方法
教师POJO类:
public class Teacher {
private int id;
private String teacherName;
private Set students;
}
学生POJO类:
public class Student {
private int id;
private String studentName;
private Set teachers = new HashSet();
}
教师映射文件Teacher.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Teacher" table="teacher" >
<id name="id" type="int">
<column name="id" />
<generator class="increment"/>
</id>
<property name="teacherName" type="string"/>
<set name="students" table="studentTeacher" lazy="true" cascade="save-update">
<key column="teacher_id"/>
<many-to-many class="Student" column="student_id"/>
</set>
</class>
</hibernate-mapping>
学生映射文件Student.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Student" table="student">
<id name="id" type="int">
<column name="id" />
<generator class="increment" />
</id>
<property name="studentName" type="string" />
<set name="teachers" table="studentTeacher" lazy="true" cascade="save-update" inverse="true">
<key column="student_id" />
<many-to-many class="Teacher" column="teacher_id" />
</set>
</class>
</hibernate-mapping>
多对多使用中间POJO类的方法:
这里只介绍双向关联的映射方法,太饿了。老婆还没回来。没心思写了
中间POJO类:StudentTeacher类
public class StudentTeacher {
private Integer id;
private Teacher teacher;
private Student student;
private int score;
...省略了getter、setter以及构造方法
}
这时Teacher和Student的pojo类内的集合里应该放置这个中间类对象的集合了
public class Teacher {
private Integer id;
private String teacherName;
private Set studentTeachers = new HashSet();
...省略了getter、setter以及构造方法
}
public class Student {
private Integer id;
private String studentName;
private Set studentTeachers = new HashSet();
...省略了getter、setter以及构造方法
}
下面是他们的映射文件,其实就是2个双向的1对多。前面那篇文章已经说过了
Student.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Student" table="student">
<id name="id" type="int">
<column name="id" />
<generator class="increment" />
</id>
<property name="studentName" type="string" />
<set name="studentTeachers" lazy="true" inverse="true" cascade="save-update">
<key column="student_id" />
<one-to-many class="StudentTeacher" />
</set>
</class>
</hibernate-mapping>
Teacher.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Teacher" table="teacher">
<id name="id" type="int">
<column name="id" />
<generator class="increment" />
</id>
<property name="teacherName" type="string" />
<set name="studentTeachers" lazy="true" inverse="true" cascade="save-update">
<key column="teacher_id" />
<one-to-many class="StudentTeacher" />
</set>
</class>
</hibernate-mapping>
StudentTeacher.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="StudentTeacher" table="studentTeacher">
<id name="id" type="int">
<column name="id" />
<generator class="increment" />
</id>
<property name="score" column="score" type="int" />
<many-to-one name="student" column="student_id" class="Student" not-null="true" />
<many-to-one name="teacher" column="teacher_id" class="Teacher" not-null="true" />
</class>
</hibernate-mapping>
- Hibernate关系映射之多对多关系
- Hibernate映射关系之多对多关系映射
- hibernate关系映射之多对多
- hibernate映射关系之多对多
- 【Hibernate五】关系映射之多对多
- Hibernate表关系映射之多对多映射
- Hibernate关联关系映射之多对多关联关系
- Hibernate之多对多关系之间的关系映射
- Hibernate关系配置之多对多映射配置
- Hibernate关系映射之多对多映射的两种方式
- 技术分析之Hibernate的关联关系映射之多对多映射
- Hibernate对象关系映射-- 多对多关联关系映射
- Hibernate对象关系映射详解之一对多关系映射
- Hibernate的关系映射多对多
- hibernate之映射关系多对多
- hibernate 映射关系 多对多
- Hibernate多对多关系映射
- Hibernate映射关系-多对多
- 类里面的成员函数指针使用
- 计算机组成原理资料(选择题)
- 计划任务
- 关于Java构造函数和继续特性的回顾
- 进程创建
- Hibernate映射关系之多对多关系映射
- zImage和uImage的区别
- ListView中如何使用Button,让onClick和onItemClick事件共存
- Windows下命令行不能用
- Hibernate映射关系之一对一 and 一对多 or 多对一
- linq Distinct的一个简单实现方法
- VS单元测试测试接口
- 从几幅架构图中偷得半点海量数据处理经验
- 队列的c++实现