我在NHibernate中使用hilo生成器。我现在需要从外部源手动导入一堆记录。我需要做些什么来复制NH对主键的作用?
我们正在使用以下内容:
<class name="MyClass">
<id name="Id" column="Catalogue_Id">
<generator class="hilo" />
</id>
<!-- other stuff -->
</class>
我相信所有表都使用单个列表'hibernate_unique_key'和'next_hi'列。
此外,我一直在阅读希洛,并认为我得到了理论,但我正在努力将其与正在创建的数据联系起来。
我有一张带钥匙1,2,3 ...的桌子
另一个有65536,65537,65538 ......
和另一个98304,98305,98306 ...
hibernate_unique_key中next_hi的值当前为6.
道歉,如果我只是错过了显而易见的事情,但有人可以解释这里发生了什么吗?
答案 0 :(得分:2)
您正在使用hilo生成器的默认配置,其中max_lo值为Int16.MaxValue(它是32767)。您在数据库中找到的next_hi值表示NHibernate中使用的hilo生成器保留了多少“块”值,其中block表示max_lo连续值。对于您的示例,您在数据库表中找到的键的值按以下方式生成:
等等。你的第六个生成器将next_hi值增加到6,这就是你在表中所拥有的。因此,考虑到此生成器和默认配置,您描述的情况是正确的。
如果要获取所有表的连续值,可以将max_lo值设置为0(将此参数放在生成器标记中:2)这将减慢算法速度,因为它必须每次都去数据库以获得新的next_hi值。