关联关系是可以反推的,比如Person和Address,一家人可以住在同个地址,但一个人也可以同时拥有都个地址,如家庭地址,工作地址。概念并不复杂,反而被未说清楚的示例搞晕了。

关联分为单向与双向,即两者之间的关系存在一种或两种
下面的为双向关联,去掉其中一个关联即是单向了.(一个问题有多个答案)

<class name="Question" table="QUESTION"><id name="Id" type="long"><generator class="assigned"/></id><set name="Answers" inverse="true"><key column="Question"/><one-to-many class="Answer"/></set>
</class>//一对多<class name="Answer" table="ANSWER"><id name="Id" type="long"><generator class="assigned"/></id><many-to-one name="Question" not-null="true"/>
</class>

//多对一

改为一对一

<class name="Question" table="QUESTION"><id name="Id" type="long"><generator class="foreign"><param name="property">Answer</param></generator></id><one-to-one name="Answer" constrained="true"/>
</class><class name="Answer" table="ANSWER"><id name="Id" type="long"><generator class="native"/></id>
</class>

以上配置为无连接表(即只有两张表),配置成有连接表更加灵活

有连接表的配置

指定unique为true,并指定set的table

一对多

<class name="Question" table="QUESTION"><id name="Id" type="long"><generator class="native"></generator></id>
<set name="Answers"  table="QuestionANSWER"><key column="Question"/><many-to-many column="AnswerId"unique="true"class="Answer"/>
</set></class><class name="Answer" table="ANSWER"><id name="Id" type="long"><generator class="native"/></id>
</class>

以上配置将会生成一个关联表

多对一

<class name="Question" table="QUESTION"><id name="Id" type="long"><generator class="native"></generator></id></class><class name="Answer" table="ANSWER"><id name="Id" type="long"><generator class="native"/></id>
<join table="AnswerQuestion"optional="true"><key column="AnswerId" unique="true"/><many-to-one name="Question"column="questionId"not-null="true"/></join></class>

生成表结构

还有关联的一对一与多对多.

双向关联

一对多,多对一即典型的父子关系

即上面的第一种关系

<class name="Question" table="QUESTION"><id name="Id" type="long"><generator class="assigned"/></id><set name="Answers" inverse="true"><key column="Question"/><one-to-many class="Answer"/></set>
</class><class name="Answer" table="ANSWER"><id name="Id" type="long"><generator class="assigned"/></id><many-to-one name="Question" not-null="true" />
</class>

一般分为主键和外键关联,可以理解为主键关联为单键关联,外键关联是多键关联

此为外键关联

主键关联

以上两张图为一对一的关系

双向关联有连接表,这里不写了。。。但需要注意配置细节

NHibernate Step By Step(6)-关联关系相关推荐

  1. NHibernate Step by Step:序篇 (转)

    原文出处:http://www.cnblogs.com/abluedog/archive/2006/04/15/375676.html 原文作者:abluedog 很久以前,你可能习惯了connect ...

  2. 【Step By Step】将Dotnet Core部署到Docker下

    一.使用.Net Core构建WebAPI并访问Docker中的Mysql数据库 这个的过程大概与我之前的文章<尝试.Net Core-使用.Net Core + Entity FrameWor ...

  3. python写一个通讯录step by step V3.0

    python写一个通讯录step by step V3.0 更新功能: 数据库进行数据存入和读取操作 字典配合函数调用实现switch功能 其他:函数.字典.模块调用 注意问题: 1.更优美的格式化输 ...

  4. C#2.0实例程序STEP BY STEP--实例二:数据类型

    C#2.0实例程序STEP BY STEP--实例二:数据类型 与其他.NET语言一样,C#支持Common Type Sysem(CTS),其中的数据类型集合不仅包含我们熟悉的基本类型,例如int, ...

  5. 文本分类step by step(二)

    (注:如有转载请标明作者:finallyliuyu, 和出处:博客园) <文本分类 step by step(一)> 在<文本分类step by step(一)>中,我们从处理 ...

  6. 数据库设计Step by Step (9)——ER-to-SQL转化

    2019独角兽企业重金招聘Python工程师标准>>> 引言:前文(数据库设计 Step by Step (8)--视图集成)讨论了如何把局部ER图集成为全局ER图.有了全局ER图后 ...

  7. ActionScript 3.0 Step By Step系列(五):走在面向对象开发的路上,以类为基础去思考编程问题...

    面向对象的程序设计(Object-Oriented Programming,简记为OOP)是一种功能非常强大的编程方法,立意于创建软件重用代码,以类为基础去思考编程问题. ActionScript 3 ...

  8. Python 调试:step into/step out/step over 的区别

    Python 调试:step into/step out/step over 的区别: 首先在PyCharm 程序中设置 " 断点 ",后点击右上角的Debug 按钮进入调试程序状 ...

  9. Caffe使用step by step:caffe框架下的基本操作和分析

    Caffe使用step by step:caffe框架下的基本操作和分析 时间:2015-10-16 11:40:09      阅读:808      评论:0      收藏:0      [点我 ...

  10. 吴恩达深度学习课程deeplearning.ai课程作业:Class 4 Week 1 Convolutional Neural Networks: Step by Step

    吴恩达deeplearning.ai课程作业,自己写的答案. 补充说明: 1. 评论中总有人问为什么直接复制这些notebook运行不了?请不要直接复制粘贴,不可能运行通过的,这个只是notebook ...

最新文章

  1. 杰和弯道超车 推企业级NAS存储应用方案
  2. linux之LAMP架构搭建
  3. lombok 简化代码_如何编写更少,更好的代码,或Project Lombok
  4. Linux使用vi/vim打开文档/文件报错E325:ATTENTION Found a swap file by the name
  5. 我滴个乖乖,我复现了Spring的漏洞,害怕!
  6. 用tf-faster-rcnn训练自己制作的车牌号数据集(VOC2007格式)
  7. java中如果需要返回多个值怎么办
  8. 加州大学欧文计算机工程硕士,UCI加州大学尔湾分校软件工程硕士Master of Software Engineering...
  9. IT男几时而立(上)
  10. Nginx的accept_mutex配置分析
  11. qgraphicsview鼠标移动图片_QGraphicsView中的QGraphicsItem鼠标拖动
  12. 服务器双网卡导致的网络故障及解决方案
  13. 电烤箱计算机控制系统,台式电烤箱及其控制系统 Desktop oven and control system
  14. 前端安全机制集合(不定期更新) -- 戴向天
  15. 解决:Eclipse SVN一直要求输出登陆密码
  16. vue点击按钮跳转页面
  17. python对excel分列转多行
  18. 进行CAD图纸文件查看时如何对其进行平移?
  19. Jump Game Jump Game II
  20. 天池竞赛:Docker 基本操作

热门文章

  1. 斯坦福公开课《机器学习》第五章SVM笔记
  2. 【带权并查集题目汇总】
  3. 京东极速版上线,“杀”入三四五六。。。线市场,一起瞅瞅
  4. 使用RomBuster获取你的网络路由器密码
  5. Kiterunner上下文感知型内容搜索工具
  6. php缓存memclear,PHP内存缓存加速功能memcached安装与用法
  7. 教师计算机培训心得体会范文,教师计算机教育培训学习心得体会
  8. [Git] Squash all of my commits into a single one and merge into master
  9. 软件需求分析(补发)
  10. 求解二叉查找树中的最低公共祖先结点