2

全体の状況がはるかに複雑であるため、問題の主要部分のみを提示しようとします-DetachedCriteriaでは次のことを達成できません

SELECT *
FROM User
LEFT OUTER JOIN GroupItem
ON User.ID = GroupItem.UserID
AND _groupItemRestrictions_

複数のGroupDefinitionが存在する可能性があり、ユーザーはそれぞれが独自のGroupDefinitionに属する複数のGroupItemに属することができます。ページング/並べ替えと(マルチレベル)グループの動作に関する複雑な理由により、このクエリでは適切なページング動作を実現できません。

SELECT *
FROM User
LEFT OUTER JOIN GroupItem
ON User.ID = GroupItem.UserID
WHERE _groupItemRestrictions_

2番目のクエリと同様のクエリは、次のように生成されます。

var criteria = DetachedCriteria.For<User>()
...
GroupItem groupItem = null;
criteria.CreateAlias(() => groupItemAlias, () => groupItem,
                                                JoinType.LeftOuterJoin);
criteria.Add(Restrictions.Or(...));
...

DetachedCriteriaを使用して最初のクエリを作成することは可能ですか?

ありがとう!

4

1 に答える 1

2

DetachedCriteriaでそのようなクエリを指定する方法はまだないようですが、HQLでは'with'句を使用しています。

http://fabiomaulo.blogspot.com/2009/05/nhibernate-210-hql-with-clause.html

http://www.mail-archive.com/nhusers@googlegroups.com/msg08451.html

アップデート:

https://nhibernate.jira.com/browse/NH-1946

この機能は現在実装されています。NHチームに感謝します:)

于 2009-08-27T17:00:58.477 に答える