NHibernate Step By Step(6)-关联关系
关联关系是可以反推的,比如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)-关联关系相关推荐
- NHibernate Step by Step:序篇 (转)
原文出处:http://www.cnblogs.com/abluedog/archive/2006/04/15/375676.html 原文作者:abluedog 很久以前,你可能习惯了connect ...
- 【Step By Step】将Dotnet Core部署到Docker下
一.使用.Net Core构建WebAPI并访问Docker中的Mysql数据库 这个的过程大概与我之前的文章<尝试.Net Core-使用.Net Core + Entity FrameWor ...
- python写一个通讯录step by step V3.0
python写一个通讯录step by step V3.0 更新功能: 数据库进行数据存入和读取操作 字典配合函数调用实现switch功能 其他:函数.字典.模块调用 注意问题: 1.更优美的格式化输 ...
- C#2.0实例程序STEP BY STEP--实例二:数据类型
C#2.0实例程序STEP BY STEP--实例二:数据类型 与其他.NET语言一样,C#支持Common Type Sysem(CTS),其中的数据类型集合不仅包含我们熟悉的基本类型,例如int, ...
- 文本分类step by step(二)
(注:如有转载请标明作者:finallyliuyu, 和出处:博客园) <文本分类 step by step(一)> 在<文本分类step by step(一)>中,我们从处理 ...
- 数据库设计Step by Step (9)——ER-to-SQL转化
2019独角兽企业重金招聘Python工程师标准>>> 引言:前文(数据库设计 Step by Step (8)--视图集成)讨论了如何把局部ER图集成为全局ER图.有了全局ER图后 ...
- ActionScript 3.0 Step By Step系列(五):走在面向对象开发的路上,以类为基础去思考编程问题...
面向对象的程序设计(Object-Oriented Programming,简记为OOP)是一种功能非常强大的编程方法,立意于创建软件重用代码,以类为基础去思考编程问题. ActionScript 3 ...
- Python 调试:step into/step out/step over 的区别
Python 调试:step into/step out/step over 的区别: 首先在PyCharm 程序中设置 " 断点 ",后点击右上角的Debug 按钮进入调试程序状 ...
- Caffe使用step by step:caffe框架下的基本操作和分析
Caffe使用step by step:caffe框架下的基本操作和分析 时间:2015-10-16 11:40:09 阅读:808 评论:0 收藏:0 [点我 ...
- 吴恩达深度学习课程deeplearning.ai课程作业:Class 4 Week 1 Convolutional Neural Networks: Step by Step
吴恩达deeplearning.ai课程作业,自己写的答案. 补充说明: 1. 评论中总有人问为什么直接复制这些notebook运行不了?请不要直接复制粘贴,不可能运行通过的,这个只是notebook ...
最新文章
- 杰和弯道超车 推企业级NAS存储应用方案
- linux之LAMP架构搭建
- lombok 简化代码_如何编写更少,更好的代码,或Project Lombok
- Linux使用vi/vim打开文档/文件报错E325:ATTENTION Found a swap file by the name
- 我滴个乖乖,我复现了Spring的漏洞,害怕!
- 用tf-faster-rcnn训练自己制作的车牌号数据集(VOC2007格式)
- java中如果需要返回多个值怎么办
- 加州大学欧文计算机工程硕士,UCI加州大学尔湾分校软件工程硕士Master of Software Engineering...
- IT男几时而立(上)
- Nginx的accept_mutex配置分析
- qgraphicsview鼠标移动图片_QGraphicsView中的QGraphicsItem鼠标拖动
- 服务器双网卡导致的网络故障及解决方案
- 电烤箱计算机控制系统,台式电烤箱及其控制系统 Desktop oven and control system
- 前端安全机制集合(不定期更新) -- 戴向天
- 解决:Eclipse SVN一直要求输出登陆密码
- vue点击按钮跳转页面
- python对excel分列转多行
- 进行CAD图纸文件查看时如何对其进行平移?
- Jump Game Jump Game II
- 天池竞赛:Docker 基本操作
热门文章
- 斯坦福公开课《机器学习》第五章SVM笔记
- 【带权并查集题目汇总】
- 京东极速版上线,“杀”入三四五六。。。线市场,一起瞅瞅
- 使用RomBuster获取你的网络路由器密码
- Kiterunner上下文感知型内容搜索工具
- php缓存memclear,PHP内存缓存加速功能memcached安装与用法
- 教师计算机培训心得体会范文,教师计算机教育培训学习心得体会
- [Git] Squash all of my commits into a single one and merge into master
- 软件需求分析(补发)
- 求解二叉查找树中的最低公共祖先结点