Hibernate详解(四)---->>关联关系映射(四)
6、单向多对多
Course.java
package com.zxf.domain;
import java.util.Set;
/** 课程实体类 */
public class Course {
private Long id; //对象标识符(OID)
private String name; //课程名
private Double creditHours; //课时数
private Set<Student> students; //选择了这门课程的学生的集合
public Course(){} //无参数的构造方法
//以下省略所有属性的getters和setters方法...
}
Student.java
package com.zxf.domain;
import java.util.Set;
/** 学生实体类 */
public class Student {
private Long id; //对象标识符(OID)
private String name; //姓名
private String grade; //所在班级
private Set<Course> courses; //所有所选课程的集合
public Student(){} //无参数的构造方法
//以下省略所有属性的getters和setters方法...
}
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.zxf.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="students" table="student_course" inverse="true">
<!-- 用key元素指定本持久类在连接表中的外键字段名 -->
<key column="course_id" />
<!-- 映射多对多关联类 -->
<many-to-many column="student_id"
class="com.zxf.domain.Student" />
</set>
</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.zxf.domain.Student" table="student">
<!-- 映射对象标识符 -->
<id name="id" column="id" type="long">
<generator class="native" />
</id>
<!-- 映射普通属性 -->
<property name="name" />
<property name="grade" />
<!-- 映射集合属性,指定连接表 -->
<set name="courses" table="student_course">
<!-- 用key元素指定本持久类在连接表中的外键字段名 -->
<key column="student_id" />
<!-- 映射多对多关联类 -->
<many-to-many column="course_id"
class="com.zxf.domain.Course" />
</set>
</class>
</hibernate-mapping>
配置文件: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"> <hibernate-configuration> <session-factory> <!-- 数据库方言设置 --> <property name="hibernate.dialect"> org.hibernate.dialect.MySQLInnoDBDialect </property> <!-- 数据库连接参数设置 --> <property name="hibernate.connection.driver_class"> com.mysql.jdbc.Driver </property> <property name="hibernate.connection.url">jdbc:mysql:///hibernate</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">123</property> <!--实际操作数据库时是否显示SQL --> <property name="hibernate.show_sql">true</property> <property name="hibernate.format_sql">true</property> <!--将数据库schema的DDL导出到数据库 --> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 以下定义实体类与数据库表的映像文件 --> <mapping resource="com/zxf/domain/Student.hbm.xml" /> <mapping resource="com/zxf/domain/Course.hbm.xml" /> </session-factory> </hibernate-configuration>
备注:
在双向多对多关联映射中,最好要在某一端的集合属性映射上设置“inverse=true”,这样明确地告诉 Hibernate,让另一端负责连接表的更新。这样会有更好的性能。
另外,从实际开发经验上来看,几乎所有的双向多对多关联都应该分解成两个双向的一对多关联。
本文介绍使用Hibernate实现单向多对多关联关系映射的方法。通过定义Course和Student类及其XML映射文件,创建学生与课程之间的关联,并详细说明了如何在数据库中建立这种联系。
3368

被折叠的 条评论
为什么被折叠?



