我有一個對象模型,其中日曆對象有一個名爲UserPermissions的IDictionary<MembershipUser, Perms>
,其中MembershipUser是一個對象,而Perms是一個簡單的枚舉。這是在日曆中的映射文件作爲NHibernate查詢字典的關鍵字段(地圖)
<map name="UserPermissions" table="CalendarUserPermissions" lazy="true" cascade="all">
<key column="CalendarID"/>
<index-many-to-many class="MembershipUser" column="UserGUID" />
<element column="Permissions" type="CalendarPermission" not-null="true" />
</map>
現在我想執行一個查詢,以找到一個給定的用戶定義的一些權限的所有日曆。許可不相關;我只想要一個給定用戶作爲UserPermissions字典中的鍵存在的日曆列表。我有用戶名屬性,而不是MembershipUser
對象。我如何使用QBC(或HQL)構建?以下是我已經試過:
ISession session = SessionManager.CurrentSession;
ICriteria calCrit = session.CreateCriteria<Calendar>();
ICriteria userCrit = calCrit.CreateCriteria("UserPermissions.indices");
userCrit.Add(Expression.Eq("Username", username));
return calCrit.List<Calendar>();
此構造無效的SQL - WHERE子句包含WHERE membership1_.Username = @p0
如預期,但FROM子句中不包括MemberhipUsers表。
此外,我真的不得不努力學習.indices
表示法。我通過挖掘NHibernate源代碼發現它,並且看到還有.elements
和其他點綴符號。哪裏有對關聯路徑的允許語法的引用?我覺得上面的內容非常接近,只是缺少一些簡單的東西。
此外觀像它會工作。 – 2011-01-18 00:21:31