Fluent NHibernate— HiLoジェネレーターを使用する場合のクラス/エンティティ固有のnext_hiシード
-
05-07-2019 - |
質問
基本的に、と同じことをしようとしています。この質問ですが、Fluent NHibernateを使用しています。
ここに私のid生成規則があります:
public class IdGenerationConvention : IIdConvention
{
public void Apply(IIdentityInstance instance)
{
instance.GeneratedBy.HiLo("1000");
}
}
これでうまくいきましたが、すべてのクラスが同じ next_hi
を使用することになります。
create table hibernate_unique_key (
next_hi INTEGER
)
各クラスが独自の next_hi
を使用するように指定する方法を知っていますか?
明確にするために、 customer_next_hi
や order_next_hi
のようなものになりたいと思いますが、列に基づいて機能すると仮定します。行ベースの場合は、各エンティティがどの行を next_hi
値に使用するかを知っていれば、それでも問題ありません。
解決 2
Fluent NHibernate Google Groupでもこの質問をしましたが、これを行う唯一の方法は、HiLoまたはTableGeneratorを継承するカスタムIDジェネレータークラスを作成することです。私が収集したものから、重要な問題は、シードテーブルを作成するSQLステートメントが1回だけ実行され、エンティティ固有の列または行を作成するための組み込みのオーバーライドまたはフックがないことです。
thisの行に沿った何かが必要です。実用的な実装ができたらもっと投稿します。
他のヒント
Anthony Dewhirtのブログに投稿されたこの問題に対する素晴らしい解決策があります: http://www.anthonydewhirst.blogspot.co.uk/2012/02/fluent-nhibernate-solution-to-enable.html
興味深い質問ですが、なぜそれをしたいのでしょうか? (かなりマイナーな)欠点として、より多くのdb要求を生成することになります。良い面としては、サロゲートIDスペースを何らかの要因で増やします。しかし、Long / BigIntはそれらをすべて組み合わせるには十分ではありませんか? (最大18,446,744,073,709,551,615 id!)