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>

 

posted @ 2017-09-25 10:03  钓鱼翁  阅读(390)  评论(0编辑  收藏  举报