我正在使用NHibernate中的hilo生成器。我现在需要从外部源手动导入大量记录。要复制NH对主键所做的操作,我需要做什么?
我们使用的是以下内容:
<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。
抱歉,如果我只是错过了显而易见的,但有人能解释一下这里发生了什么吗?
发布于 2011-02-15 14:14:26
您正在使用hilo生成器的默认配置,其中max_lo值为Int16.MaxValue (值为32767)。您在数据库中找到的next_hi的值表示NHibernate中使用的hilo生成器保留了多少个“块”,其中块表示max_lo个连续的值。对于您的示例,您在数据库表中找到的键的值是以以下方式生成的:
等等。第六个生成器将next_hi值增加到6,这就是表中的值。因此,考虑到此生成器和默认配置,您所描述的情况是正确的。
如果您想获得所有表的连续值,可以将max_lo值设置为0(将此参数放在生成器标记中: 2),这会降低算法的速度,因为它每次都必须到数据库中去获取新的next_hi值。
https://stackoverflow.com/questions/4850497
复制相似问题