私は 2 つのクラスを持っています:Cat
とDomesticCat
、それは を拡張しCat
ます。
Cat
すべての sを選択したいのですが、 one は選択しませんDomesticCat
。NHibernate 基準 API を使用してそれを行う方法は?
私は 2 つのクラスを持っています:Cat
とDomesticCat
、それは を拡張しCat
ます。
Cat
すべての sを選択したいのですが、 one は選択しませんDomesticCat
。NHibernate 基準 API を使用してそれを行う方法は?
var nonDomesticCats = session.CreateCriteria<Cat>()
.Add(Restrictions.Eq("class", typeof(Cat)))
.List<Cat>();
class
クラス階層内のエンティティの具体的なタイプを表す疑似プロパティです。
暗黙的を除くすべての継承戦略で透過的に使用できます。
まあそれは実装に依存します。
たとえば、判別列がある場合(たとえば、<discriminator column="CatType" type="string"/>
継承DomesticCat
クラスが値で判別する場合"domestic"
)、次のようなクエリを実行できます。
var allCatsButDomestic = nhSes.CreateQuery("from Cat c where c.CatType <> :catType")
.SetString("catType", "domestic")
.List<Cat>();
(この特定の例では、Cat抽象クラスはCatType列もCatType文字列プロパティにマップします)
編集および基準形式
var nonDomesticCats = session.CreateCriteria<Cat>()
.Add(Restrictions.Not(Restrictions.Eq("CatType", "domestic")))
.List<Cat>();
AnotherCatに関するあなたのコメントは、dbレベルでエンティティを区別する方法があることを示しています。