在 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. 前端1-----CSS层叠样式表了解,css的引入方式,三大选择器(标签,类,id),高级选择器

    前端1-----CSS层叠样式表了解,css的引入方式,三大选择器(标签,类,id),高级选择器 一丶CSS简介    叠样式表(英文全称:Cascading Style Sheets)是一种用来表现 ...

  2. css基础之 id和选择器

    id 和 class 选择器 如果你要在HTML元素中设置CSS样式,你需要在元素中设置"id" 和 "class"选择器. (1) id 选择器 id 选择器 ...

  3. jQuery id模糊 选择器 批量处理

    $("span[id^='province_']").each(function(index,obj){        $(obj).bind("click", ...

  4. Dapper 返回Sql server 自增长ID 标识列SCOPE_IDENTITY

    原理 使用SELECT SCOPE_IDENTITY(),取获取刚刚插入记录自增的主键 示例 entity.Create(); StringBuilder strSql = new StringBui ...

  5. [NHibernate]Parent/Child

    系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernate ...

  6. jQuery学习笔记(二):this相关问题及选择器

    上一节的遗留问题,关于this的相关问题,先来解决一下. this的相关问题 this指代的是什么 这个应该是比较好理解的,this就是指代当前操作的DOM对象. 在jQuery中,this可以用于单 ...

  7. HTML中id、name、class 区别

    参考:http://www.cnblogs.com/polk6/archive////.html http://blog.csdn.net/ithomer/article/details/ HTML ...

  8. NHibernate讲解

    第1章 NHibernate体系结构 总览 对NHibernate体系结构的非常高层的概览: 这幅图展示了NHibernate使用数据库和配置文件数据来为应用程序提供持久化服务(和持久化的对象). 我 ...

  9. Nhibernate cookbook 3.0-翻译

    /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-ts ...

随机推荐

  1. CSS蒙版

    蒙版:就是在图片上添加一个图层,用于美化页面,增加页面的可读性 <!DOCTYPE html><html><head lang="en"> &l ...

  2. HTML系列(九):表单

    一.表单标签form 表单标签用于申明表单,定义采集数据的范围,即<form>包含的数据将被提交到数据库上,包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法. 表单能够包 ...

  3. 使用MyBatis搭建一个访问mysql数据库的简单示例

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用 ...

  4. IOS8 设置TableView Separatorinset 分割线从边框顶端开始

    IOS8 设置TableView Separatorinset 分割线从边框顶端开始   在ios8上 [TableViewsetSeparatorInset:UIEdgeInsetsMake(0,0 ...

  5. android Fragment相关概念简介

    Fragment 详细介绍连接:http://blog.csdn.net/harvic880925/article/details/44927375 fragment是一种控制器对象,activity ...

  6. 创建oracle数据库的表空间、用户、目录、导入\导出文件等信息

    1.创建表空间 create tablespace ts_aw logging datafile 'd:\app\Administrator\product\tablespace\ts_aw.dbf' ...

  7. BZOJ 2301: [HAOI2011]Problem b( 数论 )

    和POI某道题是一样的...  http://www.cnblogs.com/JSZX11556/p/4686674.html 只需要二维差分一下就行了. 时间复杂度O(MAXN + N^1.5) - ...

  8. pandas的札记

    导入导出数据 在导入,导出DataFrame数据时,会用到各种格式,分为 to_csv ;to_excel;to_hdf;to_sql;to_json;to_msgpack ;to_html;to_g ...

  9. mac定时任务

    <?xml version=”1.0″ encoding=”UTF-8″?><!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN” ...

  10. 关于mysqli 连接数不能正确释放的解决方案

    /** * 析构函数 */ //解决重复链接的问题 private $db_handler = null; function __destruct() { Log::logWrite($this-&g ...