2012-04-25 9 views
1

私はNhibernateを使い慣れました。私の問題は、私のエンティティ(すなわちhbm)に含まれていない列を使ってクエリを絞りたいということです。私はこのような何かをしたい:NHibernate QueryOverにSQL-whereステートメントがありますか?

Session.QueryOver<MyEntity>() 
    .SQL_Where("MyFlag = 1") 

私はそのフラグのない使用を持っていないので、後で私は私が使用することができます知っている実体

にそれを含めたくない:

Session 
    .CreateSQLQuery("SELECT A,B,C FROM ENTITY WHERE MyFlag = 1") 
    .SetResultTransformer(Transformers.AliasToBean<MyEntity>()) 
    .List<MyEntity>(); 
列が追加された場合

QueryOver <を使用するとよいでしょう>()、それはなど、より安全です

答えて

2

あなたはフィルタを使用することができる場合があります -

マッピングクラス定義にフィルタを設定しますが、これは返されるすべての行に影響します。

<class name="Domain.Model.MyEntity, Domain.Model" table="MyTable" 
     where="(MyFlag=1)"> 
    ... 
</class> 

またはQueryOver

<filter-def name="SetMyFlag"> 
    <filter-param name=":flag" type="System.Int"/> 
</filter-def> 

<class name="Domain.Model.MyEntity, Domain.Model" table="MyTable"> 
    ... 
    <filter name="SetMyFlag" condition="(MyFlag=:flag)"/> 
</class> 

と使用して、条件付きフィルタを使用することも可能である: -

session.EnableFilter("SetMyFlag").SetParameter("flag", 1); 
session.QueryOver<MyEntity>(); 

これがないかもしれませんので、私は、マッピングされていない列の条件付きフィルタを使用したことがありませんが、作業!

+0

「EnableFilter」を使用しましたか質問できますか?そうであれば、 ''なしで 'setParameter(...)'を連鎖せずに 'session.EnableFilter(" SetMyFlag ")'だけを使って試してみました。私はすべてが不思議です! – Rippo

関連する問題