要点:

1.

<!--双向关联时要用:
inverse:由子表来维护关系,cascade:级联的关系 如果没有这个设置,
插入Customer成功(即使现在Order插入Order抛异常,这时产生了垃圾数据,
好的做法是用事务两者都能插入,避免垃圾数据的产生-->
<!--经测试:只需要在主表配置cascade="all",而子表不用配置cascade="all",
当删除主表实体时,子表的级联实体也会被删除-->
<!--cascade有4种??是吗??,分别表示级联操作的4种操作:
cascade = "none": 不能执行操作(有子时不给删父),经测试,为none时,添加父时没有自动添加子
cascade = "all" : 1.级联(删父时删子),经测试,为all时,添加父时自动添加子,
2.经测试,当设置cascade = "all",MS SQL Server设置删除和更新操作虽然设置为:不执行操作,却被覆盖为联级
cascade = "null": (删父时子设置为null),但经测试Nhibernate不支持这个值
cascade = "???": 删父时子设置为默认值-->

<set name="Orders" table="Order" generic="true"
inverse="true" cascade="all"> <key column="CustomerId" foreign-key="FK_CustomerOrders"/>
<one-to-many class="Model.Order,Model"/>
</set>

2

Custmer.cs

 using Iesi.Collections.Generic;
using System;
using System.Linq;
using System.Text; namespace Model
{
public class Customer
{
public virtual int CustomerId{ get; set; }
public virtual String FirstName { get; set; }
public virtual String LastName { get; set; } public virtual int Age { get; set; }
public virtual int Version { get; set; } private ISet<Order> _orders = new HashedSet<Order>();
public virtual ISet<Order> Orders
{
get { return _orders; }
set { this._orders = value; }
} }
}

Customer.hbm.xml

 <?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="Model"
assembly="Model"
default-lazy="true"> <class name="Model.Customer, Model"
discriminator-value="">
<!--unsaved-value="" 主键表中不需要定义,而是需要在子表中定义-->
<id name="CustomerId"
column="CustomerId"
type="Int32"
unsaved-value="">
<generator class="native" />
<!-- unsaved-value used to be null and generator was increment in h2.0.3 -->
</id> <!--version标签必须放在Id后面,否则出错-->
<version name="Version"/> <property name="FirstName" >
<column name="Firstname" length="" not-null="true"/>
</property> <property name="LastName" type="String">
<column name="Lastname"/>
</property> <property name="Age" type="int">
<column name="Age"/>
</property> <!--双向关联时要用:
inverse:由子表来维护关系,cascade:级联的关系 如果没有这个设置,
插入Customer成功(即使现在Order插入Order抛异常,这时产生了垃圾数据,
好的做法是用事务两者都能插入,避免垃圾数据的产生-->
<!--经测试:只需要在主表配置cascade="all",而子表不用配置cascade="all",
当删除主表实体时,子表的级联实体也会被删除-->
<!--cascade有4种??是吗??,分别表示级联操作的4种操作:
cascade = "none": 不能执行操作(有子时不给删父),经测试,为none时,添加父时没有自动添加子
cascade = "all" : .级联(删父时删子),经测试,为all时,添加父时自动添加子,
.经测试,当设置cascade = "all",MS SQL Server设置删除和更新操作虽然设置为:不执行操作,却被覆盖为联级
cascade = "null": (删父时子设置为null),但经测试Nhibernate不支持这个值
cascade = "???": 删父时子设置为默认值-->
<set name="Orders" table="Order" generic="true"
inverse="true" cascade="all"> <key column="CustomerId" foreign-key="FK_CustomerOrders"/>
<one-to-many class="Model.Order,Model"/>
</set>
</class>
</hibernate-mapping>

Order.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Model
{
public class Order
{
public virtual int OrderId { get; set; }
public virtual DateTime OrderDate { get; set; }
public virtual Customer Customer { get; set; } public virtual int Version { get; set; }
}
}

Order.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="Model"
assembly="Model"
default-lazy="true"> <!--table ="[Order]"因为Order是SQL关键字,表名如果不添加中括号[]会抛异常-->
<!--unsaved-value="" 主键表中不需要定义,而是需要在子表中定义
unsaved-value id的类型是对象类型(如Int32等)unsaved-value不用显示标出来,因为unsaved-value默认值是null
unsaved-value默认值是null,
作用是:用于判断实体对象是新new的内存对象,还是应经持久化的对象,Nhibernate会从数据库中去获取
该实体对象的Id与unsaved-value的值比较(如果持久化,id不等于null,当然也就不等于默认值为unsaved-value): .实体对象的Id与unsaved-value的值,相等,说明调用Save()添加,
.实体对象的Id与unsaved-value的值,不相等相等,调用Update(), 并在如果
-->
<class name="Model.Order, Model"
table ="[Order]"
discriminator-value="" lazy="false">
<id name="OrderId"
column="OrderId"
type="Int32"
unsaved-value="">
<generator class="native" />
<!-- unsaved-value used to be null and generator was increment in h2.0.3 -->
</id> <!--version标签必须放在Id后面,否则出错-->
<!--<version name="Version"/>--> <property name="OrderDate" type="DateTime" not-null="true">
<column name="OrderDate" />
</property> <many-to-one name="Customer" not-null="true">
<column name="CustomerId" />
</many-to-one> </class>
</hibernate-mapping>

最新文章

  1. Asp.Net MVC&lt;三&gt; : ASP.NET MVC 基本原理及项目创建
  2. 哆啦A梦 canvas
  3. 【leetcode】Search in Rotated Sorted Array II
  4. 更改Windows系统时间同步频率【windows 7,windows 8,win10】
  5. python2.7.6 , setuptools pip install, 报错:UnicodeDecodeError:&#39;ascii&#39; codec can&#39;t decode byte
  6. java操作mysql中的编码问题解决
  7. window redis 安装配置
  8. BNU10791:DOTA选人
  9. [Linux] rlwrap - 解决Linux下sqlplus退格、上翻键乱码问题
  10. Kate Spade_百度百科
  11. 分析 webpack 打包后的代码
  12. 部署Dubbo监控中心
  13. 十六进制颜色值和rgb颜色值互相转换
  14. 【AGC005F】简单的问题 Many Easy Problems
  15. [转帖 cnblog 的news ]技术实力超群的Netflix,为何没有CTO
  16. gitHub 迁移到gitlab上
  17. 利用JavaScript将页面截图生成图片传给后台的插件:html2canvas
  18. 场景设计以及Manual Scenario和Goal-OrientedScenario的区别
  19. T-SQL with关键字 with as 递归循环表
  20. leecode刷题(6)-- 两个数组的交集II

热门文章

  1. 利用CSS3打造一组质感细腻丝滑的按钮
  2. javascript 获取项目根路径
  3. 《samba服务搭建》RHEL6
  4. System Generator入门笔记
  5. cadence16.3破解方法
  6. 在 linux x86-32 模式下分析内存映射流程
  7. yum最常用的命令
  8. 启动另外一个activity,并返回结果
  9. Application,Session和Cookie
  10. apache+tomcat整合