为Hibernate的HiLo算法

时间:2017-10-03 20:36:32

标签: sql sql-server database hibernate nhibernate

情况:

  • 现有应用程序使用NHibernate与SQL Server数据库进行交互。 NHibernate使用其HiLo算法生成所有表的ID,并且表没有任何标识集(即GeneratedBy()。Hilo(“1”))
  • 第二个应用程序需要能够(不经常)向其中一个表添加行,但它需要能够生成一个唯一的ID,它将与使用NHibernate的应用程序很好地配合,而不必改变它的方式较旧的应用程序

问题:我如何复制NHibernate(可能是Hibernate)为了生成其中一个ID而进行的过程?我假设它将涉及获取和增加hibernate_unique_key表中的值。

1 个答案:

答案 0 :(得分:0)

这基本上是我解决问题的方法:

declare @newid int;
set @newid = (select top 1 (@max_lo + 1) * next_hi) from hibernate_unique_key);
update hibernate_unique_key set next_hi = next_hi + 1;
insert into ExampleTable(Id, Column)
values (@newid, @Value);
select @newid;

这是使用Dapper,并在交易中

因为在我的情况下,max_lo只有1,所以我只会失去"每次我以这种方式插入一行时都会输入1个ID