Hibernate双向一对多、双向多对多关联关系中的映射文件怎么写
这里以一对多关联关系为例。以Country类为一端,Competition类为多端。
一个国家可以有多个赛事,但是一个赛事只能属于一个国家。
Country类
public class Country { private Integer id; private String name; // 国家的常用名 private Set<Competition> competitions;// 这个国家拥有的赛事的集合 //setter、getter方法省略 }
Competition类
public class Competition { private Integer id; private String name;// 赛事常用名 private Country country;// 国家 //setter、getter方法省略 }
下面是映射文件
Country端映射文件的一部分
<set name="competitions" table="COMPETITION" inverse="true" lazy="false"> <!-- 在一对多关联关系中怎么才能够通过一方查到另一方呢? 靠的是id,一般情况下是由多端维护关联关系,也就是在多端的表中有一列(外键列)是专门用来保存一端的记录的ID的,也就是 映射文件中的<id>标签中对应的那列的值。 那么多端表中的外键列的名字叫什么呢???它的名字就是下面的<key>标签中的<column>标签中的 name属性的值,比如这里的COUNTRY_ID. 需要注意的是这里的<column>标签中的那么属性的值要和多端的映射表中相应的<column>标签中的值相同。 --> <key> <column name="COUNTRY_ID" /> </key> <one-to-many class="com.zcd.exercise.manyToOne.Competition" /> </set>
Competition端的映射文件的一部分
<many-to-one name="country" class="com.zcd.exercise.manyToOne.Country" lazy="no-proxy" > <column name="COUNTRY_ID" /> </many-to-one>
================================下面是双向多对多关联关系的===========================================
这里以Competition类(C端)和Team类(T端)为例
在双向多对多关联关系中,比如有C端和T端,C端可以拥有多个T端的对象,T端也可以有多个C端的对象。此时,比如C端,怎么才能保存T端的多个ID呢,增加表的列是不可能的。这时候就需要一张中间表。这样C端可以与多个T端的对象对应,T端反之如此。
下面是映射文件的代码
下面是Competition类的
<set name="teams" table="COMPETITION_TEAM" inverse="true" lazy="true"> <!-- 声明外键列的名称 --> <key> <column name="C_ID" /> </key> <!-- 声明所关联的类 --> <many-to-many class="com.zcd.exercise.footballManyToMany.Team" column="T_ID" /> </set>
下面是Country类的
<set name="competitions" table="COMPETITION_TEAM" lazy="true"> <key> <column name="T_ID" /> </key> <many-to-many class="com.zcd.exercise.footballManyToMany.Competition" column="C_ID" /> </set>