所有,NHibernate的 - 重複記錄與懶洋洋地映射集合
我有一個實體,一個具有多個集合, - 每個集合映射懶洋洋地。當我運行標準查詢時,結果集中的根實體出現重複結果。當我的所有藏品都被懶惰地映射時,這有多可能!
我驗證了我的藏品,懶洋洋地裝載着。
這裏是我的映射:
根實體 '項目':
[Bag(0, Lazy = CollectionLazy.True, Inverse = true, Cascade = "all-delete-orphan")]
[Key(1, Column = "job_id")]
[OneToMany(2, ClassType = typeof(ProjectPlan))]
public virtual IList<ProjectPlan> PlanList
{
get { return _planList; }
set { _planList = value; }
}
的標準查詢是:
ICriteria criteria = session.Session.CreateCriteria<Entities.Project>()
.Add(Restrictions.Eq(Entities.Project.PROP_STATUS, !Entities.Project.STATUS_DELETED_FLAG));
.CreateAlias(Entities.Project.PROP_PLANLIST, "p")
.Add(Restrictions.Eq("p.County", 'MIDDLSEX'))
.setFirstResult(start).setMaxResults(pageSize)
.List<Entities.Project>();
我知道,我可以糾正這個問題瓦特/鮮明的結果變壓器,我只是想知道這是否是懶惰集合上的正常行爲。
編輯:我找到了原因, - 當查看原始SQL,連接和where子句是正確的,但讓我感到困惑的是生成的Select子句, - 它不僅包含項目實體的列根實體),還包括來自項目計劃實體的列,這些列導致我上面描述的問題。我現在不在工作,但我會嘗試這樣做:.SetProjection(Projections.RootEntity()),所以我只在Select子句中獲得Project的列。
我想我發現了我的問題的副本:http://floledermann.blogspot.ca/2007/10/solving-hibernate-criterias-distinct.html – ActiveX
後續行動上面的博客,看起來像.setFirstResult(開始).setMaxResults(pageSize)是EVIL! – ActiveX