hibernate——多对多映射

其实不管是什么映射,很关键的一点就是表之间是如何产生映射的。映射关系的产生,关键是在映射文件中配置的,用特定的标签产生特定的映射关系,多对多也不例外。多对多的映射关系,都是转换成多对一的关系,即新增了一个表,来存储两个表之间的关系。此处,我们举一个老师和学生的关系,关键来分析一下,两者是如何产生多对多的映射关系的。

先建立两个类:Teacher和Student

public class Teacher {
	private int id;
	private String name;
	private Set<Student> students;
        ……//set/get方法
}
public class Student {
	private int id;
	private String name;
	private Set<Teacher> teachers;
        ……//set/get方法
}
多对多关系的建立,在两个类中,首先要各自包含对方的属性,由于是多对多,所以是一个集合对象。这个是建立映射关系的基础。


然后就是对应的映射文件了:

Teacher.hbm.xml:
<hibernate-mapping package="com.suo.domain">
	
	<class name="Teacher">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<set name="students" table="teacher_student">
		   <key column="teacher_id"/>
		      <!--key是将Teacher类对应的表的主键,作为teacher_student表的一个外键,column只是起到一个命名的作用 -->
		   <many-to-many class="Student" column="student_id"/>
		      <!--many-to-many是将Student类对应的表的主键,作为teacher_student表的一个外键,column只是起到一个命名的作用-->
		</set>
		<!--
			对set这个标签的初步理解:name指定了类中的属性的名字,table指定了这个属性要映射到的表 。
			key标签指定了本类所对应表的主键,要作为table所指定表的一个外键,并且命名这个外键。
			<many-to-many>标签指定了和本类产生多对多关系的类,并且指定了这个类所对应的表的主键作为在
			table所指定表中的一个外键,并且命名这个外键
		 -->
	</class>
	
</hibernate-mapping>
Student.hbm.xml:
<hibernate-mapping package="com.suo.domain">
	
	<class name="Student">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<set name="teachers" table="teacher_student">
			<key column="student_id"/>
			<many-to-many class="Teacher" column="teacher_id"/>
		</set>
	</class>
	
</hibernate-mapping>
由配置文件我们可以知道,这里建立的是一个双向的映射关系,即在两个映射文件中,都指定了对方的属性。没有主从表之分。需要理解的是,要在数据库中建立一个中间关系的表,如本例中的teacher_student表,只需要配置一个映射文件就行了。至于另一个文件也做了类似的配置,是因为要建立一个双向的关系,在查询的时候,就可以进行双向的查询。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值