三个数据表

Order订单表

---------------------------------------------------------

orderid    orderdate  customer

1   2009-11-09 16:54:41.013  1

2   2009-12-12 10:29:00.543  1

3   2009-12-12 10:29:01.373  1

-------------------------------------------------------

Product商品表

---------------------------------------------------------

productid  name   cost

1   电视机  500

2   收音机  50

3   手机    90

11  手机    90

12  手机    90

13  手机    90

14  手机    90

-------------------------------------------------------

OrderProduct订单产品表

---------------------------------------------------------

OrderId    productid

1   2

-------------------------------------------------------

其中OrderProduct表中有一条记录,记录了订单号为1的订单的产品为产品号为2的产品,即

订单1是一台价值50元的收音机

(一)[Order] 订单表持久(多对多中的第一多)

public class Order

{

public virtual int Unid { get; set; }

public virtual DateTime OrderDate { get; set; }

public virtual string Memo { get; set; }

public virtual Customer Customer { get; set; }

public virtual IList<Product> Products { get; set; }

}

其中Products属性为新加的,为每一个订单都有一个产品集,即一个订单对应多个产品

(二)Product产品表持久(多对多中的第二多)

public class Product

{

public virtual int Unid { get; set; }

public virtual string ProductName { get; set; }

public virtual int Cost { get; set; }

public virtual IList<Order> Orders { get; set; }

}

除了3个常规的持久属性外,还有一个Orders属性,表示每个产品都有一个订单集,即一种(一个)商品对应多个订单

(三)订单映射

<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Domain" namespace="Domain.Entities">

<class name="Domain.Entities.Order,Domain" table="[Order]" >

<id name="Unid" column="OrderId" type="Int32" unsaved-value="0">

<generator class="native" />

</id>

<property name="OrderDate" column="OrderDate" type="DateTime" not-null="true" />

<property name="Memo" column="Memo" type="String"/>

<!--多对一关系:Orders属于一个Customer-->

<many-to-one name="Customer" column="Customer" not-null="true" class="Customer" foreign-key="FK_CustomerOrders"/>

<bag name="Products" generic="true" table="OrderProduct">

<key column="OrderId" foreign-key="FK_orderproduct_order"/>

<many-to-many column="ProductId"

class ="Domain.Entities.Product,Domain"

foreign-key="FK_orderproduct_product"/>

</bag>

</class>

</hibernate-mapping>

在原有文件的基础上添加了多对多关系映射,这里说明一下:

·Order持久类中的IList<Product> Products属性,为Ilist泛型集合,在nhibernate中与bag对应。

·bag的名称为Products,即属性Products

·外键,OrderId,这个是两者关系表(OrderProduct)表中的OrderId,这个不是映射关系,而是数据库字段,大小写不敏感。

·外键名称FK_orderproduct_order

·多对多映射,对应多个产品,类型为Product持久类型,外键FK_orderproduct_product为产品对两者关系表的外键

(四)产品映射

<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Domain" namespace="Domain.Entities">

<class name="Domain.Entities.Product,Domain" table="Product" >

<id name="Unid" column="productid" type="Int32" unsaved-value="0">

<generator class="native" />

</id>

<property name="ProductName" column="[name]" type="String" not-null="true" />

<property name="Cost" column="Cost" type="Int32"/>

<bag name="Orders" generic="true" table="OrderProduct">

<key column="productid" foreign-key="FK_orderproduct_product"/>

<many-to-many column="OrderId"

class="Domain.Entities.Order,Domain"

foreign-key="FK_orderproduct_order"/>

</bag>

</class>

</hibernate-mapping>

三个常规属性除外,与订单表同理的bag映射

·IList<Order> Orders

·bag的名称为Orders,即属性Orders

·外键,productid,这个是两者关系表(OrderProduct)表中的productid,这个不是映射关系,而是数据库字段,大小写不敏感。

·外键名称FK_orderproduct_product

·多对多映射,对应多个产品,类型为Product持久类型,外键FK_orderproduct_order为订单对两者关系表的外键

说明:多对多关系的实现由中间的一个一对一表来实现,所以这种关系带有很好的对称性。所以可以在对称性上来理解这种微妙的关系。

未完

更多内容请参见:http://www.cnblogs.com/lyj/archive/2008/10/27/1320764.html

转载于:https://www.cnblogs.com/jams742003/archive/2009/12/14/1623432.html

NHibernate初探(五) 多对多关系测试示例相关推荐

  1. NHibernate之旅(11):探索多对多关系及其关联查询

    本节内容 多对多关系引入 多对多映射关系 多对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 多对多关系引入 让我们再次回顾在第二篇中建立的数据模型 ...

  2. 什么是数据库中的多对多关系?

    什么是数据库建模中的多对多关系?如何在数据库中实现这种关系?本文中的示例将回答这些问题. 多对多关系可能是在数据库中显示的最棘手的关系.因此,我在本文中的第一步将是解释它们是什么.然后,我将继续给你几 ...

  3. Java一对多、多对多关系示例

    一对多 生活中常见一对多关系的例子,如一个学校可以包含多个学生,一个学生属于一个学校,那么这就是一个典型的一对多关系,可以通过集合进行关系的表示. 下面是基于集合应用的一个示例,这个示例将作为以后 J ...

  4. (经典)Hibernate多对多关系映射(五)

    多对多关系是产生在三张表的关系中的,必须有一张中间表,必须保证中间表只有两个字段,必须是复合主键,必须是另两张表的外键. 一.用多对多关系来设计类 例如:学生选课 这里只创建学生和课程类,中间表不生成 ...

  5. Java多对多关系示例

    使用集合不仅可以表示一对一的关系,也可以表示多对多的关系.例如,一个学生可以选多门课程,一门课程可以有多个学生参加,那么这就是一个典型的多对多关系. 要完成上面要求,首先应该定义两个类,分别是学生信息 ...

  6. java 一对多、多对多关系示例

    一对多 生活中常见一对多关系的例子,如一个老师教多个学生,一个学生属于一个老师,那么这就是一个典型的一对多关系,可以通过集合进行关系的表示. 定义一个学生类 public class Student ...

  7. mybatis框架实现一对多、多对多关系查询,以及递归查询(单表多级分类:省市区三级地址查询)

    mybatis框架练习 mybatis框架中,包括实体类(这些实体类与数据库中的字段属性相对应),mybatis的配置文件(即mybatis-config.xml,这个配置文件用于连接实体类和orm( ...

  8. 如何理解元数据、数据元、元模型、数据字典、数据模型这五个的关系?如何进行数据治理呢?数据治理该从哪方面入手呢?

    如何理解元数据.数据元.元模型.数据字典.数据模型这五个的关系?如何进行数据治理呢?数据治理该从哪方面入手呢? 导读 一.数据元 二.元数据 三.数据模型 四.数据字典 五.元模型 导读 请问元数据. ...

  9. Django 之多对多关系

    1. 多对多关系 作者 <--> 书籍 1. 表结构设计 1. SQL版 -- 创建作者表 create table author( id int primary key auto_inc ...

  10. hibernate_day03_MySQL数据库-表与表之间的多对多关系-实例

    hibernate_day03_MySQL数据库-表与表之间的多对多关系-实例 : 操作环境 :Windows 10 教育版.eclipse.MySQL数据库.SQLyog数据库管理工具 MySQL ...

最新文章

  1. AngularJs--过滤器(filter)
  2. Android --- log.e(),log.d(),log.i()等的区别
  3. php单词出现频率,PHP编程计算文件或数组中单词出现频率的方法
  4. springboot aop加载流程
  5. 蓝桥杯 算法训练试题 数据交换 Java
  6. cordova使用Gradle构建下载maven太慢,使用阿里云镜像
  7. centos6.4安装及升级gcc 4.8.2(已实践)
  8. 设计模式笔记五:原型模式
  9. 注解形式控制器 数据验证,类型转换(2)
  10. pandas 选取第一行_用pandas中的DataFrame时选取行或列的方法
  11. POJ 2888 Magic Bracelet ——Burnside引理
  12. 为什么RegisterClientScriptResource方法在自定义控件中的RenderContents期间不起作用?...
  13. sm缩写代表什么意思_PE给水管常见的字母缩写都代表什么?
  14. centos 更新内核步骤
  15. A311D项目开发总结
  16. asp.net园林绿化服务交易网站(三层架构)案例
  17. 【JESD204B】基于JESD204B协议的ADC、DAC数据传输
  18. 双人贪吃蛇c语言,关于C 双人贪吃蛇显示的问题
  19. 2017-2021系统集成项目管理师综合知识易错题整理
  20. 远程连接服务器---SSH详解

热门文章

  1. python语法学习第五天--lambda表达式、filter()、map()
  2. ++库 照片风格转换风格_婚纱照中式风格照片大全 2020年中式婚纱照怎么拍
  3. Collections 常用方法
  4. mysql 临时表 创建和插入
  5. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_14-webpack研究-webpack-dev-server...
  6. 小D课堂 - 新版本微服务springcloud+Docker教程_6-03 高级篇幅之zuul常用问题分析
  7. 第490篇--Accessing the Domain info is denied in IIS.
  8. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_13_使用字节流读取中文的问题...
  9. Sonar安装和常见问题解决
  10. Unity PlayerPrefs类进行扩展(整个对象进行保存)