首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate详解(4)->>关联关系映射(四)

2012-09-08 
Hibernate详解(四)----关联关系映射(四)Hibernate详解(四)----关联关系映射(四)?6、单向多对多???Cours

Hibernate详解(四)---->>关联关系映射(四)

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 /></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"       /></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 /></id><!-- 映射普通属性 --><property name="name" /><property name="grade" /><!-- 映射集合属性,指定连接表 --><set name="courses" table="student_course"><!-- 用key元素指定本持久类在连接表中的外键字段名 --><key column="student_id" /><!-- 映射多对多关联类 -->      <many-to-many column="course_id"       /></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,让另一端负责连接表的更新。这样会有更好的性能。

???? 另外,从实际开发经验上来看,几乎所有的双向多对多关联都应该分解成两个双向的一对多关联。

?

?

?

热点排行