映射文件的写法:写多对多的映射文件,从关联表方去考虑,即:从中间表去考虑,set集合中的配置就是如何对中间表的描述。中间表需要:定义中间表的名称、中间表的两个外键,
这两个外键分别参考哪个表的主键
其实:student表和中间表的关系,就是一对多的关系,然后从这点来写中间表
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.g_hbm_manyToMany">
<class name="Student" table="student">
<id name="id">
<generator></generator>
</id>
<property name="name"/>
<!-- teachers属性,Set集合。
表达的是本类与Teacher的多对多。
table属性:中间表(集合表)
key子元素:集合外键(引用当前表主键的那个外键)
这里按照中间表的结构来写:中间表的表名、两个外键-->
<set name="teachers" table="teacher_student" inverse="false"> //table定义中间表的表名
<key column="studentId"></key> //指出一个外键,因为实在本表中,所以他知道是参考哪个表的主键(就是本表的主键)。Inverse让Student来维护关系。
<many-to-many column="teacherId"></many-to-many>//指出另一个主键,class是指出参考的是哪个表的主键
</set>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.g_hbm_manyToMany">
<class name="Teacher" table="teacher">
<id name="id">
<generator></generator>
</id>
<property name="name" type="string" column="name"/>
<!-- students属性,Set集合。
表达的是本类与Student的多对多。
-->
<set name="students" table="teacher_student" inverse="true">这样让本方放弃对关系的维护
<key column="teacherId"></key>
<many-to-many column="studentId"></many-to-many>
</set>
</class>
</hibernate-mapping>
转载于:https://my.oschina.net/cys21/blog/513619