Hibernate实现many-to-many的映射关系

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>

总结

以上是 Hibernate实现many-to-many的映射关系 的全部内容, 来源链接: utcz.com/z/355846.html

回到顶部