1

私はNibernateが初めてです。私の問題は、エンティティ (hbm) に含まれていない列を使用してクエリを絞り込みたいことです。私はこのようなことをしたい:

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<>() を使用するとよいでしょう。列を追加するとより安全です。

4

1 に答える 1

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>();

マップされていない列で条件付きフィルターを使用したことはないので、これは機能しない可能性があります。

于 2012-04-25T11:05:14.223 に答える