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

本文介绍使用Hibernate实现单向多对多关联关系映射的方法。通过定义Course和Student类及其XML映射文件,创建学生与课程之间的关联,并详细说明了如何在数据库中建立这种联系。

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,让另一端负责连接表的更新。这样会有更好的性能。

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

 

 

 

采用PyQt5框架与Python编程语言构建图书信息管理平台 本项目基于Python编程环境,结合PyQt5图形界面开发库,设计实现了一套完整的图书信息管理解决方案。该系统主要面向图书馆、书店等机构的日常运营需求,通过模块化设计实现了图书信息的标准化管理流程。 系统架构采用典型的三层设计模式,包含数据存储层、业务逻辑层和用户界面层。数据持久化方案支持SQLite轻量级数据库与MySQL企业级数据库的双重配置选项,通过统一的数据库操作接口实现数据存取隔离。在数据建模方面,设计了包含图书基本信息、读者档案、借阅记录等核心数据实体,各实体间通过主外键约束建立关联关系。 核心功能模块包含六大子系统: 1. 图书编目管理:支持国际标准书号、中国图书馆分类法等专业元数据的规范化著录,提供批量导入与单条录入两种数据采集方式 2. 库存动态监控:实时追踪在架数量、借出状态、预约队列等流通指标,设置库存预警阈值自动提醒补货 3. 读者服务管理:建立完整的读者信用评价体系,记录借阅历史与违规行为,实施差异化借阅权限管理 4. 流通业务处理:涵盖借书登记、归还处理、续借申请、逾期计算等标准业务流程,支持射频识别技术设备集成 5. 统计报表生成:按日/月/年周期自动生成流通统计、热门图书排行、读者活跃度等多维度分析图表 6. 系统维护配置:提供用户权限分级管理、数据备份恢复、操作日志审计等管理功能 在技术实现层面,界面设计遵循Material Design设计规范,采用QSS样式表实现视觉定制化。通过信号槽机制实现前后端数据双向绑定,运用多线程处理技术保障界面响应流畅度。数据验证机制包含前端格式校验与后端业务规则双重保障,关键操作均设有二次确认流程。 该系统适用于中小型图书管理场景,通过可扩展的插件架构支持功能模块的灵活组合。开发过程中特别注重代码的可维护性,采用面向对象编程范式实现高内聚低耦合的组件设计,为后续功能迭代奠定技术基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值