hibernate学习之多对多映射

  多对多映射是现实生活中最常见的映射,也是最容易理解的映射。废话少说,直接开始。

  映射原理

  不论是单向关联还是双向关联都是通过第三张表,将两个表中的主键放到第三张做一个关联。用第三张表来解决可能会造成数据冗余的问题。


  举例

  一个学生(Student)对多个科目(Course),一门学科对多个学生。

  分类

  单向的多对多关联映射(单向Student--->Course)


关系模式



实例映射

Studdent.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
	
	
<hibernate-mapping package="com.hyxd.entity">
	<class name="Student" table="t_student">
		<id name="studentId" column="s_id">
			<generator class="native"></generator>
		</id>
		<property name="studentName" type="string"></property>
			<!-- 
			多对多映射:
			1.  映射的集合属性: “developers”
			2.  集合属性,对应的中间表: “t_relation”
			3. 外键字段:  prjId
			4. 外键字段,对应的中间表字段:  did
			5.   集合属性元素的类型
		 -->
		<set name="course" table="t_relation" cascade="save-update">
			<key column="s_id"></key>
			<many-to-many column="c_id" class="Course"></many-to-many>
		</set>
	</class>
</hibernate-mapping>

Course.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
	
	
<hibernate-mapping package="com.hyxd.entity">
	<class name="Course" table="t_course">
		<id name="courseId" column="c_id">
			<generator class="native"></generator>
		</id>
		<property name="courseName" type="string"></property>
	</class>
</hibernate-mapping>

多对多关联映射,在实体类中,跟一对多关联映射一样,也是用集合来表示的。标签中用table属性重命名中间表名称,标签定义当前表的主键,用标签来关联另一张表。

   双向多对多映射Course映射文件中也要映射Student的关系具体代码与Student的<Set></Set>中的一样,需要更改Set集合里面的属性和relation表的主键


多对多双向关系中,User和Role的映射文件相同,值得注意的是生成的中间表名称必须一样,生成中间表的字段必须一样。

总结

多对多关联映射到此就结束了,经过对一对多关联映射的学习,相对而言,多对多关联映射变得非常的简单了,非常像一对多关联映射的变体。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值