这里以一对多关联关系为例。以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>

Hibernate双向一对多、双向多对多关联关系中的映射文件怎么写的更多相关文章

  1. Hibernate 建立一对多双向关联关系

    下面内容整理自<精通Hibernate>第二版 注:既然是双向关联."一对多双向关联"和"多对一双向关联"是同一回事. 对象位于内存中,在内存中从一 ...

  2. hibernate中配置单向多对一关联,和双向一对多,双向多对多

    什么是一对多,多对一? 一对多,比如你去找一个父亲的所有孩子,孩子可能有两个,三个甚至四个孩子. 这就是一对多 父亲是1 孩子是多 多对一,比如你到了两个孩子,它们都是有一个共同的父亲. 此时孩子就是 ...

  3. hibernate 2 一对多、多对一 双向映射

    多对一或一对多中,在多的一方维护关系效率高 一:java实体类 1.Classes.java package cn.gs.ly.school.entity; import java.util.Set; ...

  4. Hibernate(6)—— 一对多 和 多对多关联关系映射(xml和注解)总结

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XM ...

  5. Hibernate—— 一对多 和 多对多关联关系映射(xml和注解)总结(转载)

    One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XML/Annotation) 懒加载和积极加载 一对多双向外键关联(XML/Annotati ...

  6. Hibernate自身一对多和多对多关系映射

    一对多关系映射大家都明白,关系双方都一个含有对方多个引用,但自身一对多很多同学都不明白什么意思,那么首先我就说明一下什么是自身一对多,其实也很好理解,自身一对多就是自身含有本身的多个引用,例如新闻类别 ...

  7. hibernate的一对多、多对一详解

    :双向一对多关系,一是关系维护端(owner side),多是关系被维护端(inverse side).在关系被维护端需要通过@JoinColumn建立外键列指向关系维护端的主键列.     publ ...

  8. java框架之Hibernate(3)-一对多和多对多关系操作

    一对多 例:一个班级可以有多个学生,而一个学生只能属于一个班级. 模型 package com.zze.bean; import java.util.HashSet; import java.util ...

  9. hibernate的一对多和多对一关联

    一对一的关联就不写了,一般项目也用不到,如果可以一对一就直接合成一个表了,也不会出现一对一的关系. 本文主要研究一对多的关系. 1.一对多的关系研究: (1)RDB中关系表达:  多的一方创建外键指向 ...

随机推荐

  1. [转载+原创]Emgu CV on C# (五) —— Emgu CV on 局部自适应阈值二值化

    局部自适应阈值二值化 相对全局阈值二值化,自然就有局部自适应阈值二值化,本文利用Emgu CV实现局部自适应阈值二值化算法,并通过调节block大小,实现图像的边缘检测. 一.理论概述(转载自< ...

  2. OOP_由C到C++

    由C到C++ OOP第一课 C语言的局限 C++的特点 C++的程序特征 C++程序的结构特性 C++程序的编辑.编译和运行 ⭐C++对C的补充 C语言的局限 类型检查机制相对较弱,使得程序中的一些错 ...

  3. Golang教程:Map

    什么是 map? Map 是 Go 中的内置类型,它将键与值绑定到一起.可以通过键获取相应的值. 如何创建 map? 可以通过将键和值的类型传递给内置函数 make 来创建一个 map.语法为:mak ...

  4. 在线课程笔记—.NET基础

    关于学习北京理工大学金旭亮老师在线课程的笔记. 介绍: 在线课程网址:http://mooc.study.163.com/university/BIT#/c 老师个人网站:http://jinxuli ...

  5. 前端(二):css样式

    本节笔记根据css中文手册整理,内容已做成思维导图.下载地址https://files.cnblogs.com/files/kuaizifeng/css.xmind.zip. css(Csacadin ...

  6. SZU2

    CF:Problem 425A 区间暴力,枚举区间.交换选定区间最小值和剩余区间最大值k次. 其实等同于将剩余区间最大k个加到选定区间里,然后排序 #include <iostream> ...

  7. 域名解析成功后,怎样访问服务器上Eclipse中的Web工程

    右击工程选择Export-->选择Web文件夹下的WAR file-->Destination下选择文件存放的地址-->Finish就可以获得WAR文件了然后将WAR文件放到tomc ...

  8. java TreeSet 实现存自定义不可重复数据

    本文主要是介绍一下java集合中的比较重要的Set接口下的可实现类TreeSet TreeSet类,底层用二叉树的数据结构 * 集合中以有序的方式插入和抽取元素. * 添加到TreeSet中的元素必须 ...

  9. cocos-creator 脚本逻辑-2

    1.预制体 1)节点操作 Cc.find(‘node-1’) 获取节点 全局事件 作用于 canvas this.node.destroy() 删除节点(从内存中删除) 添加删除获取节点或组件 let ...

  10. avalon2简单数据绑定(自定义属性绑定)

    <!DOCTYPE html> <html> <head> <title>项目</title> <meta charset=" ...