2010-12-01 8 views
0

NHibernateは一般的にかなりスマートなので、関連するエンティティのフィールドがクエリで使用されていない場合、many-to-oneのジョインは省略されます。しかし、私は副選択せずに、他のテーブルの上に式の弁別をしたいので、私はNHibernateが常に多対1のジョインを行うようにする方法

protected override string DiscriminatorFormulaTemplate 
{ 
    get { return this.DiscriminatorFormula; } 
} 

でカスタム存続を行なったし、式中だけで列名を指定します(ただし、この列名は、関連するテーブルからである)

<discriminator formula="TypeID" /> 

これは一般的に名前の競合が起こりやすいことを理解していますが、この特定のケースではこれは問題ではありません。

これで、関連する(many-to-one)テーブルを常にメインテーブルに強制的に結合したいと考えています。これを行う最善の方法は何ですか?いくつかのフィールドが使用されていることをHNが検出すると、何度か結合されますが、これを強制的に実行する方法はわかりません。

答えて

2

これは、Get、Criteria、およびLazy Loadをカバーしますが、HQLは対象外です。

別のオプションは、すべての操作のためのカスタムSQLを使用して、代わりにテーブルのサブクエリからの選択(そのクエリ内の参加と)

残念ながら、この時点であなたは何がハックされますされています。 NHの設計方法は、弁別器でなければなりません。

関連する問題