2012-09-13 56 views
1

我將使用身份生成器的類轉換爲使用hilo的類。我還使用一個單一的表,不同的行每實體:將Identity列生成器轉換爲hilo:應該將「next_hi」初始化爲什麼?

EntityId (table) 
- EntityName 
- NextHigh 

舊錶:

Patients (table) 
- Id (identity) 

新表:

PatientRecord (table) 
- Id 

爲了保持數據的完整性,我只是用現有患者。如新病患記錄.Id:

insert into PatientRecord (Id) 
select Id from Patients 

並創建一個EntityId條目:

insert into EntityId values ('PatientRecord', ??) 

其中??是下一個喜價值。我應該在這裏使用什麼價值?默認情況下,初始化列將是1.我只是使用它,還是應該使用類似select MAX(Id) from PatientRecord的東西?

+0

3.3或更高版本,您還可以使用「增強型ID生成器」wi第一個「合併」優化器,用於生成器存儲值和下一個可用標識符之間更直接的映射。 –

+0

@OskarBerggren感謝您的建議。您能否指出任何有關彙集的增強型ID生成器的體面文檔? – HackedByChinese

+0

它的工作原理與Hibernate一樣:http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/mapping.html#mapping-declaration-id-enhanced您也可以在NHibernate.Test源代碼:https://github.com/nhibernate/nhibernate-core/blob/master/src/NHibernate.Test/IdGen/Enhanced/你會選擇基於數據庫結構的表或序列(但序列將恢復如果需要的話),然後根據你想要處理的內容選擇優化器。 「混合LO」是最接近「自然人理解」的IMHO。 –

回答

1

next_hi就像是用於乘法生成身份(id)的會話密鑰,因此您可以插入任何想要的內容,例如1或2或10,每個用戶增加next_hi並使用它生成所有身份,直到某些最大值,然後又問另一個next_hi通過遞增......採用這項策略的身份的是獨一無二的......如果你正在使用NHibernate,他們可以在本地生成

Is there a practical way of migrating from identity columns to hilo keys?

http://fabiomaulo.blogspot.com/2009/02/nh210-generators-behavior-explained.html

相關問題