代码之家  ›  专栏  ›  技术社区  ›  Carl Raymond

针对字典(map)的键字段的nhibernate查询

  •  1
  • Carl Raymond  · 技术社区  · 15 年前

    我有一个对象模型,其中一个日历对象有 IDictionary<MembershipUser, Perms> 称为userpermissions,其中membershipuser是一个对象,perms是一个简单的枚举。这在Calendar as的映射文件中

    <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 还有其他一些点符号。关联路径的允许语法的引用在哪里?我觉得上面的很接近,只是缺少了一些简单的东西。

    1 回复  |  直到 11 年前
        1
  •  2
  •   Daniel Schilling Aaron Palmer    11 年前

    只是尝试自己做这件事,看起来这可以用hql完成,但不能用criteria api。

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

    在HQL中执行此操作:

    http://ayende.com/Blog/archive/2009/06/03/nhibernate-mapping-ndash-ltmapgt.aspx

    具体看艾恩德的评论:

    有点像: 从profile p join p.entries e中选择1 其中index(e)=“hascats”和e=“true”