Fluent NHibernate— HiLoジェネレーターを使用する場合のクラス/エンティティ固有のnext_hiシード

StackOverflow https://stackoverflow.com/questions/1400208

  •  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!)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top