NHibernate 的 ID 标识选择器
在 Hibernate 中,每个对象需要一个标识 ID,通过这个标识 ID 建立对象与数据库中记录的对应关系。
Nhibernate 提供了多种方式来建立这个 POID。基于不同的生成策略,可以选择更佳的方式。
首先是赋值方式:assigned,这种方式需要应用程序赋予对象一个标识 ID, 这种情况典型地用在自然主键的时候。
第二种方式是非插入方式的生成器,对于新的应用程序来说,这是最佳的方式,NHibernate 赋予持久化对象一个标识,而不需要写入数据库后才能生成。这允许 NHibernate 在事务完成的时候,才需要写入数据库,减少了访问数据库的往返次数,下面的方式都属于这种策略。
- hilo,使用 Hi/Lo 算法生成一个整数。
- guid,通过调用 System.Guid.NewGuid() 生成一个 GUID,在基于共享的数据库中是安全的。
- guid.comb,10 个字节的随机 GUID,其中 6 个字节来自当前的日期和时间。
- guid.native,从数据库获取 GUID,每生成一个需要一次数据库的往返。
- uuid.hex,生成的 GUID 使用人易读的 32 字节串。
- uuid.string,生成的 GUID 使用 16 个字节的二进制等效字符表示,结果是 16 个字符的串,不是人易读的。
- counter,简单地递增的整数,从系统的时钟进行初始化,然后递增。不适合共享的数据库中。
- increment,也是一个简单的整数,在开始的时候,从数据库获取最大的主键值,然后递增,也不适合共享的数据库。
- sequence,从数据库获取新的 ID,支持象 Oracle,DB2 和 PostgreSQL 这样的有序列支持的数据库。
- seqhilo,组合 Hi/Lo 算法和序列,以提供比序列更好的性能。
- foreign,在一对一的关系中,简单地复制主键。
第三种策略是插入之后的 POID 生成器,需要数据持久化到数据库之后,由数据库生成,一般用在现有的数据库中。
- identity,返回数据库生成的 ID
- select,执行一个 select 查询来获取插入行的 ID
- sequence-identity,对于使用命名序列的数据库,返回数据库生成的 Id.
- trigger-identity,返回数据库触发器生成的 Id
最后,native 返回数据库生成的 ID,对于 Microsoft SQL Server,DB2, Informix, MySQL, PostgreSQL, SQLite 和 Sybase 等效于 identity,对于 Oracle 和 Firebird,等效于 sequence,对于 Ingres,则是 hilo.
Nhibernate映射文件配置序列
<generator class="sequence">
<param name="sequence">sequence_name</param>
</generator>
NHibernate 的 ID 标识选择器的更多相关文章
- 前端1-----CSS层叠样式表了解,css的引入方式,三大选择器(标签,类,id),高级选择器
前端1-----CSS层叠样式表了解,css的引入方式,三大选择器(标签,类,id),高级选择器 一丶CSS简介 叠样式表(英文全称:Cascading Style Sheets)是一种用来表现 ...
- css基础之 id和选择器
id 和 class 选择器 如果你要在HTML元素中设置CSS样式,你需要在元素中设置"id" 和 "class"选择器. (1) id 选择器 id 选择器 ...
- jQuery id模糊 选择器 批量处理
$("span[id^='province_']").each(function(index,obj){ $(obj).bind("click", ...
- Dapper 返回Sql server 自增长ID 标识列SCOPE_IDENTITY
原理 使用SELECT SCOPE_IDENTITY(),取获取刚刚插入记录自增的主键 示例 entity.Create(); StringBuilder strSql = new StringBui ...
- [NHibernate]Parent/Child
系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernate ...
- jQuery学习笔记(二):this相关问题及选择器
上一节的遗留问题,关于this的相关问题,先来解决一下. this的相关问题 this指代的是什么 这个应该是比较好理解的,this就是指代当前操作的DOM对象. 在jQuery中,this可以用于单 ...
- HTML中id、name、class 区别
参考:http://www.cnblogs.com/polk6/archive////.html http://blog.csdn.net/ithomer/article/details/ HTML ...
- NHibernate讲解
第1章 NHibernate体系结构 总览 对NHibernate体系结构的非常高层的概览: 这幅图展示了NHibernate使用数据库和配置文件数据来为应用程序提供持久化服务(和持久化的对象). 我 ...
- Nhibernate cookbook 3.0-翻译
/* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-ts ...
随机推荐
- iframe自适应高度代码
var adjustIframe = function (id) { var iframe = document.getElementById(id) var idoc = iframe.conten ...
- matlab如何保存figure中去掉白边的图片
输出图片成可直接调入的灰度图,设置输出图片空白边距,以及调整图片大小,纵横比. 一.先显示图片,imshow.如果是plot,或者newplot,直接看“三”.imshow(strain_image, ...
- oracle习题SQL语句练习
表(一)Student (学生表) 属性名 数据类型 可否为空 含 义 Sno Varchar2(3) 否 学号(主码) Sname Varchar2(8) 否 学生姓名 Ssex Varchar2( ...
- 初来乍到--------smarty
Smarty Day01-----smarty的使用 作用:把php+html分离,程序和美工 使用: 1.下载源码包 2.目录结构 libs 源码文件 Smarty.class.php templa ...
- JSTL与EL常用标签(转)
JSTL与EL EL相关概念 JSTL一般要配合EL表达式一起使用,来实现在jsp中不出现java代码段.所以我们先来学习EL表达式 EL主要用于查找作用域中的数据,然后对它们执行简单操作:它不是编程 ...
- js判断某个方法是否存在
window.onload = function(){ try{ if(test && typeof(test) == "function"){ test(); } ...
- 如何使用Palette提取Bitmap的颜色
5.X提出了color palette 的概念,能够让主题动态的去适应当前的页面色调,让整个app色调看起来比较和谐统一 那么如何使用Palette呢,必不可少,我们需要在Android studio ...
- cluster maintain manager Software群集管理软件
1,ocfs2 2,crmsh(cluster management shell,)==crm shell [pacemaker OpenAIS,heartbeat,corosync,crmsh] 3 ...
- VB.NET版机房收费系统---SqlHelper
SqlHelper,最早接触这个词儿的时候,好像是13年的暑假,那个夏天来的比往年来的稍晚一些,呵呵,sqlhelper,翻译成中文就是数据库助手,帮手.百度百科这样对她进行阐述: SqlHelper ...
- Android学习路线(二十)运用Fragment构建动态UI
要在Android系统上创建一个动态或者多面板的用户界面,你须要将UI组件以及activity行为封装成模块.让它可以在你的activity中灵活地切换显示与隐藏. 你可以使用Fragment类来创建 ...