【NHibernate】id标签的unsaved-value属性

父表


  <class name="Model.Customer, Model"
discriminator-value="0">
<!--unsaved-value="0" 主键表中不需要定义,而是需要在子表中定义-->
<id name="CustomerId"
column="CustomerId"
type="Int32"
unsaved-value="0">
<generator class="native" />
<!-- unsaved-value used to be null and generator was increment in h2.0.3 -->
</id>

子表


  <class name="Model.Order, Model"
table ="[Order]"
discriminator-value="0" lazy="false">
<id name="OrderId"
column="OrderId"
type="Int32"
unsaved-value="0">
<generator class="native" />
<!-- unsaved-value used to be null and generator was increment in h2.0.3 -->
</id>

了解unsaved-value,需要知道如下知识点:

1.unsaved-value默认值是null
2.id的type标签属性可以标示为:
【1】基本对象类型如int,long
【2】对象类型,如Int32,Int64

3.Nhibernate保存机制:
当父对象调用save(),由于级联的关系,保存子对象,那么保存子对象的方式
到底是Upadate(已经持久化在数据库中)
还是Save(还没有持久化在数据库中,只是刚刚在内存中新new)?

如何判断是用调用upadte还是调用Save,
答案是:
用unsaved-value的值与HNibernate自动从数据库中获取的子类对象的Id进行比较,
   (注意:如果没有持久化,HNibernate自动从数据库中获取的子类对象的Id的值等于null)
  如果是:

【1】unsaved-value的值与子类对象的Id相等,表明没有持久化,调用save;
  【2】unsaved-value的值与子类对象的Id不相等,表明已持久化,调用Update;

    综上,
当子表id标签的type标签属性标示为:
【1】基本对象类型如int,long,需要显示明unsaved-value = 0,因为unsaved-value默认值是null,而基本对象类型如int的默认值为0,
这样使得即使子类对象还没有持久化,HNibernate自动从数据库中获取的子类对象的Id=0,
这样根据上述的Nhibernate保存机制,永远调用Upadte,不会调用save。 

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


【2】对象类型,如Int32,Int64,不需要

    <id name="OrderId"
column="OrderId"
type="Int32" >



【NHibernate】id标签的unsaved-value属性

时间: 2024-08-01 04:45:56

【NHibernate】id标签的unsaved-value属性的相关文章

表单标签&lt;label&gt;----------------------用for属性 和radio 的id相关联 可以让鼠标点字就相当于点击radio

定义和用法 <label> 标签为 input 元素定义标注(标记). label 元素不会向用户呈现任何特殊效果.不过,它为鼠标用户改进了可用性.如果您在 label 元素内点击文本,就会触发此控件.就是说,当用户选择该标签时,浏览器就会自动将焦点转到和标签相关的表单控件上. <label> 标签的 for 属性应当与相关元素的 id 属性相同. <form><label for="male">Male</label><

2015.7.20 第十课 课程重点(jq选择器:id、类、标签、特殊、属性、包含、位置、过滤)

1.在VS中新建jq项目: 新建web窗体时选择第二个: 将系统生成的多余文件夹删掉,仅留下Scripts和Web.config: 将Scripts文件夹改名为我们熟悉的js(也可以不改,仅推荐改),并新建文件夹css和image,并在对应位置添加页面,html.css.js 将上图鼠标所指的.min.js文件拖动到html中,将自己新建的js文件拖动到它下方,如图: *两者上下位置关系千万别弄饭了,min.js一定要在最上面. 将Script文件夹中的第一个js文件(_references.j

块属性标签和行内属性标签及样式优先级

一,块属性标签 1,默认撑满一行: 2,高度,行高以及顶.底边距都可控制: 3,宽度缺省是它所在容器的100%,除非设定一个宽度. 二,行内属性标签 1,默认标签后面跟相同属性的标签元素: 2,不支持宽高: 3,只支持横向的margin和padding: 4,便签间的换行和空格被解析: 注:关于嵌套问题,块属性标签里可以嵌套行内属性标签,而行内属性标签却并不能随意嵌套块属性标签. 三,关于inline-block 1,让行内属性标签支持宽高:2,让块属性标签在一行显示:3,换行被解析:4,内容撑

Html标签&lt;a&gt;的target属性

target属性规定了在何处打开超链接的文档. 如果在一个 <a> 标签内包含一个 target 属性,浏览器将会载入和显示用这个标签的 href 属性命名的.名称与这个目标吻合的框架或者窗口中的文档.如果这个指定名称或 id 的框架或者窗口不存在,浏览器将打开一个新的窗口,给这个窗口一个指定的标记,然后将新的文档载入那个窗口.从此以后,超链接文档就可以指向这个新的窗 口. <html><body> <h3>Table of Contents</h3&

iframe标签用法详解(属性、透明、自适应高度)(总结)

<iframe src="http://www.jb51.net" width="200" height="500"> 脚本之家使用了框架技术,但是您的浏览器不支持框架,请升级您的浏览器以便正常访问脚本之家. </iframe> 在transparentBody.htm文件的<body>标签中,我已经加入了style="background-color=transparent" 通过以下四种

spring:使用&lt;prop&gt;标签为Java持久属性集注入值

spring:使用<prop>标签为Java持久属性集注入值 使用 spring 提供的<prop>为Java持久属性集注入值,也就是向 java.util.Properties 对象中注入值. <props> 是简化了的 <map> ,该元素对应配置类型为 java.util.Properties 的对象依赖. 因为Properties 只能指定 String 类型的键和值,所以 <props> 的配置简化很多,只有固定的格式. 1.创建 Te

Spring中&lt;bean&gt;标签之使用p标签配置bean的属性

在spring的bean配置文件中我们常可以见到下面的例子: <bean id="user" class="com.sys.User" p:name-ref="name" /> 其中,p:name-ref="name"使用了p标签来配置bean的name的引用. 在使用p标签配置bean的属性时,我们先要声明p标签的命名空间xmlns:p="http://www.springframework.org/s

link标签的rel等属性属性的作用简单介绍

link标签的rel等属性属性的作用简单介绍:大家知道通过<link>标签可以引入外部样式表,例如: <link rel="stylesheet" type="text/css" href="style.css" /> 属性解析:1.href:规定引入文件的路径.2.type:规定被链接文件的格式类型.3.rel:用来规定当前文档与被连接文档的关系.如果rel的值是stylesheet,也就是说引入的文件可以作为当前文件的

图片img标签alt与title属性评测实验

图片img标签alt与title属性评测实验 SEO优化是慢工也是细活.细节做的好,如鱼得水,做的不好,举步维艰.做SEO优化的都知道,搜索引擎对图片理解是通过alt属性,所以在图片alt属性中用包含关键字的简要文字说明,也是页面优化的一部分.如果想要做的更好,可以在title属性里,进一步对图片说明,相关知识点SEO优化在<图片优化方法|百度图片优化>文章里有详细说明.今天SEO优化就和大家分享图片img标签alt与title属性评测实验. 图片img标签alt与title属性评测实验代码