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

 更新时间:2019年03月29日 14:17:47   作者:jane_jojo  
今天小编就为大家分享一篇关于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>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • 聊聊Lombok中的@Builder注解使用教程

    聊聊Lombok中的@Builder注解使用教程

    @Builder注解的作用主要是用来生成对象,并且可以为对象链式赋值。接下来通过本文给大家介绍Lombok中的@Builder注解使用教程,感兴趣的朋友一起看看吧
    2021-11-11
  • SpringBoot整合FreeMarker的过程详解

    SpringBoot整合FreeMarker的过程详解

    FreeMarker 是一个模板引擎,可以将模板与数据结合生成文本输出,本文给大家介绍SpringBoot整合FreeMarker的过程,感兴趣的朋友一起看看吧
    2024-01-01
  • IDEA部署Docker镜像的实现示例

    IDEA部署Docker镜像的实现示例

    本文主要介绍了IDEA部署Docker镜像的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • UniApp + SpringBoot 实现微信支付和退款功能

    UniApp + SpringBoot 实现微信支付和退款功能

    这篇文章主要介绍了UniApp + SpringBoot 实现微信支付和退款功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • Java包装类的概述与应用

    Java包装类的概述与应用

    包装类使用起来非常方便,但是没有对应的方法来操作这些基本数据类型,可以使用一个类,把基本类型的数据装起来,在类中定义一些方法,我们可以使用类中的方法来操作这些基本类型的数据,这篇文章主要给大家介绍了关于Java包装类的相关资料,需要的朋友可以参考下
    2022-04-04
  • Java多线程的实现方式比较(两种方式比较)

    Java多线程的实现方式比较(两种方式比较)

    Java多线程实现方式有两种,第一种是继承Thread类,第二种是实现Runnable接口,两种有很多差异,下面跟着本文一起学习吧
    2015-11-11
  • SpringBoot结合mybatis-plus实现分页的项目实践

    SpringBoot结合mybatis-plus实现分页的项目实践

    本文主要介绍了SpringBoot结合mybatis-plus实现分页的项目实践,主要基于MyBatis-Plus 自带的分页插件 PaginationInterceptor,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Java使用sleep方法暂停线程Thread

    Java使用sleep方法暂停线程Thread

    这篇文章介绍了Java使用sleep方法暂停线程Thread,文中通过示例代码介绍的非常详细。对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • java注释转json插件开发实战详解

    java注释转json插件开发实战详解

    这篇文章主要为大家介绍了java注释转json插件开发实战详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • java中的值传递和引用传递的区别分析

    java中的值传递和引用传递的区别分析

    本文介绍了“java中的值传递和引用传递的区别分析”,需要的朋友可以参考一下
    2013-03-03

最新评论