2010-03-22 64 views
1

我正在嘗試檢索單獨的詳細行,而不必爲父項創建一個對象。我有一個地圖,加入一個父表與細節來實現這一點:在NHibernate映射中使用連接的重複項

Table("UdfTemplate"); 
Id(x => x.Id, "Template_Id"); 
Map(x => x.FieldCode, "Field_Code"); 
Map(x => x.ClientId, "Client_Id"); 

Join("UdfFields", join => 
{ 
    join.KeyColumn("Template_Id"); 

    join.Map(x => x.Name, "COLUMN_NAME"); 
    join.Map(x => x.Label, "DISPLAY_NAME"); 
    join.Map(x => x.IsRequired, "MANDATORY_FLAG") 
     .CustomType<YesNoType>(); 
    join.Map(x => x.MaxLength, "DATA_LENGTH"); 
    join.Map(x => x.Scale, "DATA_SCALE"); 
    join.Map(x => x.Precision, "DATA_PRECISION"); 

    join.Map(x => x.MinValue, "MIN_VALUE"); 
    join.Map(x => x.MaxValue, "MAX_VALUE"); 
}); 

當我使用運行在NH查詢:

Session.CreateCriteria(typeof(UserDefinedField)) 
    .Add(Restrictions.Eq("FieldCode", code)).List<UserDefinedField>(); 

我回來的第一行三次,而不是它應該返回的三個單獨的行。查看NH Profiler中的SQL跟蹤,查詢看起來是正確的。問題感覺就像是在映射中,但我不確定如何解決該過程。我即將開啓日誌記錄以查看我能找到的內容,但是我想我會在這裏發帖,以防某些有經驗映射連接的人知道我出錯的位置。

+0

我改變的加盟,使該方向的測繪工程模板>字段。這是不理想的,因爲我必須創建額外的對象/地圖,但它會導致類似的查詢被執行,並且我正在尋找最終結果。如果任何人有關於如何加入孩子>父母的話,仍然可以打開想法。 – 2010-03-22 17:55:04

+0

您是否嘗試過使用DistinctRootEntity轉換器?會是像.SetResultTransformer(CriteriaUtil.DistinctRootEntity) – ddango 2010-03-23 16:35:41

+0

我做過 - 它只會返回一行而不是三個不同的行。 – 2010-03-24 17:11:31

回答