首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sql生成hilo

使用sql生成hilo
EN

Stack Overflow用户
提问于 2011-01-31 19:48:44
回答 1查看 1.2K关注 0票数 1

我正在使用NHibernate中的hilo生成器。我现在需要从外部源手动导入大量记录。要复制NH对主键所做的操作,我需要做什么?

我们使用的是以下内容:

代码语言:javascript
复制
<class name="MyClass">
    <id name="Id" column="Catalogue_Id">
        <generator class="hilo" />
    </id>
    <!-- other stuff -->
</class>

我相信它使用一个单列的表'hibernate_unique_key‘,所有表的列都是'next_hi’。

此外,我一直在阅读关于hilo的文章,我认为我已经理解了这个理论,但我正在努力将它与正在创建的数据联系起来。

我有一张桌子,上面有键1,2,3……

另一个有65536,65537,65538……

另外98304,98305,98306..。

hibernate_unique_key中next_hi的值当前为6。

抱歉,如果我只是错过了显而易见的,但有人能解释一下这里发生了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-15 14:14:26

您正在使用hilo生成器的默认配置,其中max_lo值为Int16.MaxValue (值为32767)。您在数据库中找到的next_hi的值表示NHibernate中使用的hilo生成器保留了多少个“块”,其中块表示max_lo个连续的值。对于您的示例,您在数据库表中找到的键的值是以以下方式生成的:

  1. First生成器保留了第一个关键字块(从0到32767),并将next_hi的值递增为1。此生成器从第一个表中生成值:1,2,3。
  2. 第二个生成器保留了第二个关键字块(从32768到65535),并将hext_hi的值增加到2。
  3. 第三个生成器保留了第三个关键字块(从65536到98303),并将next_hi的值增加到3。此生成器从第二个表65536生成值,65537....
  4. Fourth生成器保留了第四个关键字块(从98304到131071),并将next_hi的值递增到4。此生成器从第三个表98304生成值98305...

等等。第六个生成器将next_hi值增加到6,这就是表中的值。因此,考虑到此生成器和默认配置,您所描述的情况是正确的。

如果您想获得所有表的连续值,可以将max_lo值设置为0(将此参数放在生成器标记中: 2),这会降低算法的速度,因为它每次都必须到数据库中去获取新的next_hi值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4850497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档