2

QueryOver または ICriteria を使用してクエリを実行するときに、NHibernate の外部結合に追加条件を指定する方法はありますか?

外部結合されたテーブルにいくつかの追加条件が必要ですが、NHibernate は常に末尾の WHERE 句に条件を追加します。これでは正しい動作が得られません ( http://weblogs.sqlteam.com/jeffs/archive/2007を参照)。 /05/14/criteria-on-outer-joined-tables.aspx )。

Criteria または QueryOver 構文を使用してこれを行う方法が見つからないようです...

ありがとう

4

3 に答える 3

9

あなたはおそらくこれをずっと前に理解しています。解決策は、次のように JoinAlias メソッドに ICriteria パラメータを追加することです。

Party aliasParty = null;
Party aliasPartyFrom = null;
var parties = QueryOver.Of<Party>(() => aliasParty)
              .Left.JoinAlias(
                               () => aliasParty.AccountabilitiesFrom, 
                               () => aliasAccFrom, 
                               Restrictions.On(() => aliasAccFrom.TimeTo).IsNull)

コードの最後の行で、TimeTo を null にしたい aliasAccFrom に制限があります。

于 2012-01-14T19:06:45.000 に答える
2

(私自身の質問に答えました - ごめんなさい!)

Fabio は NHibernate リストで同様の質問に答えました - ここに投稿したいと思いました。

NH3.0以降のCriteriaで可能です。HQL の機能 http://fabiomaulo.blogspot.com/2009/05/nhibernate-210-hql-with-clause.html

Criteria を使用して、CreateAlias(string associationPath、string alias、JoinType joinType、ICriterion withClause) CreateCriteria(string associationPath、string alias、JoinType joinType、ICriterion withClause) を参照してください。

QueryOver では利用できませんが、ここに JIRA があります: https://nhibernate.jira.com/browse/NH-2592

于 2011-03-23T19:58:12.280 に答える
1

クエリオーバーで次のクエリを試しました

SystemUser systemUser= null;
SurveyRequests SurveyRequests = null;

var Query2 = Session.QueryOver<SystemUser>(() => systemUser)
               .Left.JoinAlias(() => systemUser.SurveyRequests, 
               () => surveyRequest,
               Restrictions.On(()=>surveyRequest.Survey.Id).IsIn(new object []{surveyID }))
于 2013-02-27T14:01:20.160 に答える