zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    EJB>Session Beans
    JSF>标准转换器(Converter)
    EJB>定时服务(Timer Service)
    EJB>实体继承
    EJB>拦截器(Interceptor)
    JSF>输入、输出、命令、选择、表格、其他标签
    JBoss的配置
    JSF>JSF 生命周期
    EJB>改变sessionbean的JNDI名称
    JSF>错误讯息处理
  • 原文地址:https://www.cnblogs.com/GooPolaris/p/7919986.html
Copyright © 2011-2022 走看看