Hibernate多对多 关联映射(many-to-many)
在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使用中最好转换成一对多的对象模型;
Hibernate会为我们创建中间关联表,转换成两个一对多。
(1)一个最简单的例子就是学生选课的数据表了

(2)Student.java
- public class Course {
- private Integer id;
- private String name;
- private Set<StuCourse> stuCourses;
- //get/set方法
- }
(3)Student.java
- public class Student {
- private Integer id;
- private String name;
- private Set<StuCourse> stuCourses;
- <span style="font-family: Arial, Helvetica, sans-serif;">//get/set方法</span>
- }
(4)StuCourse.java学生选课表
- package com.hsp.domain;
- public class StuCourse {
- private Integer id;
- private Student student;
- private Course course;
- private Integer grade;
- //get/set方法
- }
(5)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 package="com.hsp.domain">
- <class name="Course">
- <id name="id" type="java.lang.Integer">
- <generator class="sequence">
- <param name="sequence">course_seq</param>
- </generator>
- </id>
- <property name="name" type="java.lang.String">
- <column name="name" length="64" />
- </property>
- <!-- 配置one-to-many 表示一门课程可以对应多个选课记录 -->
- <set name="stuCourses">
- <key column="course_id" />
- <one-to-many class="StuCourse" />
- </set>
- </class>
- </hibernate-mapping>
(6)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 package="com.hsp.domain">
- <class name="Student">
- <id name="id" type="java.lang.Integer">
- <generator class="sequence">
- <param name="sequence">stu_seq</param>
- </generator>
- </id>
- <property name="name" type="java.lang.String">
- <column name="name" length="64" />
- </property>
- <!-- 这里我们配置了one-to-many 一个学生可以对应多个选课记录 -->
- <set name="stuCourses">
- <key column="student_id" /> <!-- 这里的column是外键 -->
- <one-to-many class="StuCourse" /> <!-- many所对应的表 -->
- </set>
- </class>
- </hibernate-mapping>
(7)StuCourse.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 package="com.hsp.domain">
- <class name="StuCourse">
- <id name="id" type="java.lang.Integer">
- <generator class="sequence">
- <param name="sequence">stucourse_seq</param>
- </generator>
- </id>
- <property name="grade" type="java.lang.Integer">
- <column name="grade" length="3" />
- </property>
- <many-to-one name="course" column="course_id" />
- <many-to-one name="student" column="student_id" />
- </class>
- </hibernate-mapping>
(8)hibernate.cfg.xml文件
- <?xml version='1.0' encoding='UTF-8'?>
- <!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
- <!-- Generated by MyEclipse Hibernate Tools. -->
- <hibernate-configuration>
- <session-factory>
- <property name="connection.username">root</property>
- <property name="connection.url">
- jdbc:oracle:thin:@127.0.0.1:1521:OracleDB
- </property>
- <property name="dialect">
- org.hibernate.dialect.Oracle9Dialect
- </property>
- <property name="connection.password">root</property>
- <property name="connection.driver_class">
- oracle.jdbc.driver.OracleDriver
- </property>
- <property name="show_sql">true</property>
- <!-- 配置让hibernate自动创建关系模型(表) -->
- <property name="hbm2ddl.auto">update</property>
- <mapping resource="com/hsp/domain/Course.hbm.xml" />
- <mapping resource="com/hsp/domain/StuCourse.hbm.xml" />
- <mapping resource="com/hsp/domain/Student.hbm.xml" />
- </session-factory>
- </hibernate-configuration>
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对w3xue的支持。如果你想了解更多相关内容请查看下面相关链接