【问题标题】:Generating ID for column managed by Hibernate's HiLo algorithm为 Hibernate 的 HiLo 算法管理的列生成 ID
【发布时间】:2018-03-15 03:32:34
【问题描述】:
情况:
- 现有应用程序使用 NHibernate 与 SQL Server 数据库交互。所有表的 ID 均由 NHibernate 使用其 HiLo 算法生成,并且这些表没有任何标识集(即 GeneratedBy().Hilo("1"))
- 第二个应用程序需要能够(不经常)向其中一个表中添加行,但它需要能够生成一个唯一的 ID,该 ID 可以很好地与使用 NHibernate 的应用程序配合使用,而无需更改其方式较旧的应用程序有效
问题:如何复制 NHibernate(可能是 Hibernate)所经历的过程以生成这些 ID 之一?我认为这将涉及获取和增加 hibernate_unique_key 表中的值。
【问题讨论】:
标签:
sql
sql-server
database
hibernate
nhibernate
【解决方案1】:
这基本上是我解决问题的方法:
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