本文转载自:http://www.cnblogs.com/lemon-love/archive/2010/03/10/1683058.html

(1) assigned
主键由外部程序负责生成,无需NHibernate参与。

(2) hilo
通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主
键生成 历史状态。

(3) seqhilo
与hilo 类似,通过hi/lo 算法实现的主键生成机制,只是主键历史
状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle。

(4) increment
主 键按数值顺序递增。此方式的实现机制为在当前应用实例中维持
一个变量,以保存着当前的最大值,之后每次需要生成主键的时候
将此值加1作为 主键。
这种方式可能产生的问题是:如果当前有多个实例访问同一个数据
库,那么由于各个实例各自维护主键状态,不同实例可能生成同样
的 主键,从而造成主键重复异常。因此,如果同一数据库有多个实
例访问,此方式必须避免使用。

(5) identity
采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL
中的主键 生成机制。

(6) sequence
采用数据库提供的sequence 机制生成主键。如Oralce 中的
Sequence。

(7) native
由 NHibernate根据底层数据库自行判断采用identity、hilo、sequence
其中一种作为主键生成方式。) uuid.hex
由 Hibernate基于128 位唯一值产生算法生成16 进制数值(编码后
以长度32 的字符串表示)作为主键。

(8) foreign
使用外部表的字段作为主键。
一般而言,利用uuid.hex方式生成主键将提供最好的性能和数据库平台适
应性。

另外由于常用的数据库,如Oracle、DB2、SQLServer、MySql 等,都提
供了易用的主键生成机制 (Auto-Increase 字段或者Sequence)。我们可以在数
据库提供的主键生成机制上,采用generator- class="native"的主键生成方式。
不过值得注意的是,一些数据库提供的主键生成机制在效率上未必最佳,
大量并发insert数据 时可能会引起表之间的互锁。
数据库提供的主键生成机制,往往是通过在一个内部表中保存当前主键状
态(如对于自增型主键而言,此内部表中就 维护着当前的最大值和递增量),
之后每次插入数据会读取这个最大值,然后加上递增量作为新记录的主键,之
后再把这个新的最大值更新回内部 表中,这样,一次Insert操作可能导致数据
库内部多次表读写操作,同时伴随的还有数据的加锁解锁操作,这对性能产生
了较大影响。
因 此,对于并发Insert要求较高的系统,推荐采用uuid.hex 作为主键生成
机制。

(转)NHibernate之Generator主键生成方式的更多相关文章

  1. NHibernate-Generator主键生成方式

    NHibernate之Generator主键生成方式   (1) assigned主键由外部程序负责生成,无需NHibernate参与. (2) hilo通过hi/lo 算法实现的主键生成机制,需要额 ...

  2. NHibernate composite-id联合主键配置

    NHibernate的联合主键配置比较复杂,初次配置可能需要花些时间,但只要我们理解了,掌握一定的步骤还是很容易的. 1.设计数据结构 Users:用户表 名称 Users 说明 用户表 序号 字段名 ...

  3. HIbernate学习笔记2 之 主键生成方式

    一.hibernate主键生成方式: 1.常用方式:mysql:自增长生成主键(identity) <generator class="identity"> </ ...

  4. Hibernate——(3)主键生成方式

    一.Hibernate中常用的主键生成方式有如下几种: 1)identity: 用于自动生成主键方式,除了 Oracle 不支持,其他数据库一般都支持(较常用) 2)sequence: Oracle ...

  5. hibernate 主键生成方式

    1)assigned主键由外部程序负责生成,无需Hibernate参与. 2)hilo通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态. 3)seqhilo与hilo 类 ...

  6. 01_8_sql主键生成方式

    01_8_sql主键生成方式 1. 配置映射文件 <insert id="insertStudentBySequence" parameterClass="Stud ...

  7. nhibernate实体类主键ID赋值问题

    有个同事忽然来找我,说他遇到了一个问题,在调用nhibernate 进行update数据的时候报错,说是有数据行锁定. 看代码,没啥问题. 直接在PL/SQL developer里对数据库进行插入,也 ...

  8. Hibernate主键生成方式之hilo

    当利用Hibernate的getHibernateTemplate().save(obj);插入的对象的主键ID为null的时候自动生成5位数的主键ID进行插入. 此笔记的由来: 老夫在此处上传材料后 ...

  9. hibernate主键(generator)生成方式

    1) assigned 主键由外部程序负责生成,无需Hibernate参与. 2) hilo 通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态. 3) seqhilo 与 ...

随机推荐

  1. cocos2dx打飞机项目笔记六:GameScene类和碰撞检测 boundingbox

    GameScene类虽然是占用游戏最多时间的类,但是里面的东西不是很多,最重要的就是碰撞检测了,碰撞检测代码如下: void GameScene::detectionCrash() { CCArray ...

  2. spring配置hibernate映射文件-------通配符

    <!-- 这里一定要注意是使用spring的mappingLocations属性进行通配的 -->      <property name="mappingLocation ...

  3. 算法总结之 将单链表的每K个节点之间逆序

    给定一个单链表的表头节点head,实现一个调整单链表的函数,是的每k个节点之间逆序,如果最后不够k个节点一组,则不调整最后几个节点 思路: 如果k的值小于2,不调整.k<1 没有意义,k==1代 ...

  4. vs 2010 mvc 3.0安装软件

    下载链接如下:MVC 3安装包:http://www.microsoft.com/downloads/zh-cn/details.aspx?familyid=d2928bc1-f48c-4e95-a0 ...

  5. Android 报错Android - Performing stop of activity that is not resumed

    [原文] FROM STACKOVERFLOW: Just giving my 50 cents on the issue. Catching the exception is indeed one ...

  6. lua 写逻辑打印log时,打印到一半后停止不再打印,程序停止

    问题描述:ubuntu下用lua开发游戏电子邮件模块,自己测试时向用户推送100封,而用户最多只能有50封.这是调用sysdelete删除一些邮件.当打印log时,打印到一半后程序中途停止.将打印lo ...

  7. Windows 安装Mysql8.0 绿色包

    〇.准备: MySQL8.0 Windows zip包下载地址:https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.11-winx64.zip 环 ...

  8. poj3189二分图多重匹配

    题意:有一些牛和牛棚(有容量),每头牛对牛棚有喜好程度,要求每头牛都有一个棚子的情况下,找最小的喜好程度之差 题解:题意是真的恶心,wa了好久才发现没读懂,一直以为输入 的是排名,其实是牛棚标号,从1 ...

  9. vue cli关闭eslint严格语法检查

    eslint是一个JavaScript的校验插件,通常用来校验语法或代码的书写风格. 官方文档:https://eslint.org 这篇文章总结了eslint的规则:Eslint规则说明 1.关闭e ...

  10. SQLAlchemyの增删改查

    用a*my写原味sql from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, I ...