0
// 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>
該映射適用於使用Request的Grant屬性的其他所有內容。 (我在Grant.hbm.xml中添加了映射以嘗試解決此問題。)nHibernate映射/查詢問題
如果我使用下面的第1行,NH無法在Grant(true)上找到Status屬性。如果我使用第2行,NH無法在請求中找到Grant.PO屬性(同樣如此)。我怎樣才能讓NH看起來在正確的地方?
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表中看到的連詞,所以我只是沒有得到我想要的連接。
編輯,這工作,謝謝!
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>();