nHibernate映射/查询问题 //Request.hbm.xml //Grant.hbm.xml
映射适用于使用Request的Grant属性的所有其他内容。(为了解决这个问题,我在Grant.hbm.xml中添加了映射。) 如果我使用下面的第1行,NH在Grant上找不到Status属性(true)。如果我使用第2行,NH在请求时找不到Grant.PO属性(也是true)。我怎样才能让NH看起来在正确的地方nHibernate映射/查询问题 //Request.hbm.xml //Grant.hbm.xml,nhibernate,Nhibernate,映射适用于使用Request的Grant属性的所有其他内容。(为了解决这个问题,我在Grant.hbm.xml中添加了映射。) 如果我使用下面的第1行,NH在Grant上找不到Status属性(true)。如果我使用第2行,NH在请求时找不到Grant.PO属性(也是true)。我怎样才能让NH看起来在正确的地方 // Request.hbm.xml <many-to-one name="Grant" class="Grant" column="GrantId" lazy=
// 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>
public IList GetAllActionRequired(字符串用户名)
{
ISession session=GetSession();
返回会话
.CreateCriteria(类型(请求))
//.CreateCriteria(“授予”)1
//.SetFetchMode(“Grant”,FetchMode.Eager)#2a
//.SetFetchMode(“Grant”,FetchMode.Join)#2b
.Add(限制.析取()
.Add(限制项.连接项()
.添加(限制条件、情商(“状态”、“草案”))
.Add(Restrictions.Eq(“请求者”,用户名)))
.Add(限制项.连接项()
.Add(Restrictions.Eq(“状态”、“已提交”))
.Add(Restrictions.Eq(“Grant.PO”,用户名)))
...)
.List();
}
如果我注释掉Grant表中的连接词,查询就会工作,所以我没有得到想要的连接
编辑,这成功了,谢谢
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>();
}
返回会话
.CreateCriteria(请求类型),“r”)
.CreateCriteria(“授予”、“g”)
.Add(限制.析取()
.Add(限制项.连接项()
.添加(限制条件、等式(“r.Status”、“Draft”))
.Add(Restrictions.Eq(“r.Requestor”,用户名)))
.Add(限制项.连接项()
.Add(Restrictions.Eq(“r.Status”、“Submitted”))
.Add(Restrictions.Eq(“g.PO”,用户名)))
...)
.List();
您应该使用这样的别名:
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>();
然后
return session
.CreateCriteria(typeof (Request),"req")
.CreateCriteria("req.Grant","gr")
或
取决于属性所在的位置
.Add(Restrictions.Eq("req.Status", "Draft"))
.Add(Restrictions.Eq("gr.Status", "Draft"))