首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >nHibernate映射/查询问题

nHibernate映射/查询问题
EN

Stack Overflow用户
提问于 2009-08-02 13:01:37
回答 1查看 297关注 0票数 0
代码语言:javascript
运行
复制
    // Request.hbm.xml
    <many-to-one name="Grant" class="Grant" column="GrantId" lazy="false"/>

    // Grant.hbm.xml
    <set name="requests" table="Request" generic="true">
      <key column="GrantId" />
      <one-to-many class="Request"/>
    </set>

该映射适用于使用请求的Grant属性的所有其他内容。(我在Grant.hbm.xml中添加了映射,以尝试解决此问题。)

如果我使用下面的第1行,NH无法在Grant (true)上找到Status属性。如果我使用第2行,NH无法在请求中找到Grant.PO属性(也是真的)。我怎样才能让NH出现在正确的位置?

代码语言:javascript
运行
复制
    public IList<Request> GetAllActionRequired(string userName)
    {
        ISession session = GetSession();

        return session
            .CreateCriteria(typeof (Request))
            //.CreateCriteria("Grant") #1
            //.SetFetchMode("Grant", FetchMode.Eager) #2a
            //.SetFetchMode("Grant", FetchMode.Join) #2b
            .Add(Restrictions.Disjunction()
                .Add(Restrictions.Conjunction()
                    .Add(Restrictions.Eq("Status", "Draft"))
                    .Add(Restrictions.Eq("Requestor", userName)))
                .Add(Restrictions.Conjunction()
                    .Add(Restrictions.Eq("Status", "Submitted"))
                    .Add(Restrictions.Eq("Grant.PO", userName)))
                ...)
            .List<Request>();
    }

如果我注释掉Grant表中的连接,那么查询就会工作,所以我没有得到我想要的连接。

编辑,成功了,谢谢!

代码语言:javascript
运行
复制
return session
    .CreateCriteria(typeof (Request), "r")
    .CreateCriteria("Grant", "g")
    .Add(Restrictions.Disjunction()
        .Add(Restrictions.Conjunction()
            .Add(Restrictions.Eq("r.Status", "Draft"))
            .Add(Restrictions.Eq("r.Requestor", userName)))
        .Add(Restrictions.Conjunction()
            .Add(Restrictions.Eq("r.Status", "Submitted"))
            .Add(Restrictions.Eq("g.PO", userName)))
        ...)
        .List<Request>();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-08-03 05:33:56

您应该像这样使用别名:

代码语言:javascript
运行
复制
return session
        .CreateCriteria(typeof (Request),"req")
        .CreateCriteria("req.Grant","gr") 

然后

代码语言:javascript
运行
复制
.Add(Restrictions.Eq("req.Status", "Draft"))

代码语言:javascript
运行
复制
.Add(Restrictions.Eq("gr.Status", "Draft"))

取决于属性所在的位置。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1218858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档