2010-07-30 71 views
1

的休眠手冊這樣說:NHibernate的CreateSqlQuery和addEntity

字符串SQL = 「SELECT ID爲{c.id},NAME爲{c.name},」 +

"BIRTHDATE as {c.birthDate}, MOTHER_ID as {c.mother}, {mother.*} " + 

    "FROM CAT_LOG c, CAT_LOG m WHERE {c.mother} = c.ID"; 

列表loggedCats = sess.createSQLQuery(SQL)

.addEntity("cat", Cat.class) 

    .addEntity("mother", Cat.class).list() 

現在,我有什麼是基本相同的。我是每行返回兩個相同類型的。我做一個選擇是這樣的:

SELECT {ctrl1.*}, {ctrl2.*} FROM tableA AS A 
               LEFT JOIN tableB AS ctrl1 ON (A.controlID = ctrl1.controlID AND ctrl1.controlOptionType = ? AND ctrl1.controlOptionValue = ?) 
               LEFT JOIN tableB AS ctrl2 ON (A.controlID = ctrl2.controlID AND ctrl2.controlOptionType = ? AND ctrl2.controlOptionValue = ?) 

然後我addEntity("ctrl1", typeof(mycontrolclass)addEntity("ctrl1", typeof(mycontrolclass)

這似乎完全一樣,以我爲榜樣。但我得到這個異常: 「無法執行查詢」,內部異常是「無法在結果中找到指定的列」。 如果我複製異常中的sql(它已添加「AS ctrl1_1_3_3_」等)它工作正常。

謝謝。

回答

0

你究竟想要做什麼?我相信你可能不需要使用它們中的任何一個。

// Using HQL: 
var motherId = 25; 
var hql = "select c.birthDate, c.mother from Cat c where c.mother.Id = :motherId"; 
var result = Session.CreateQuery(hql) 
        .SetParameter("motherId", motherId) 
        .ToList(); 

// Using NHibernate.LINQ: 
var result = (from cat in Session.Linq<Cat>() 
      where cat.Mother.Id == motherId 
      select new { cat.birthDate, cat.mother }).ToList(); 
+0

那麼,不管查詢是如何組成的,它仍然返回一個對象數組。如果我有一個連接兩次連接同一個表的連接,它只是重複該表而不是爲該行提供第二個實例。 – Matt 2010-07-30 09:03:06

+0

你能解釋一下嗎?我不太理解。 – rebelliard 2010-07-30 12:36:27

+0

好吧,讓我說,我這樣做,它會返回兩個tableB結果在每一行。所以說.List將返回一個數組,如: pos 0:[tableB] [tableB] pos 1:[tableB] [tableB] 但是第一個(在每一行中)tableB結果(id和這樣)應該不同於第二張表B的結果。但不是。它只是重複 – Matt 2010-07-30 21:50:12

0

我處理你的問題,只是爲了學習目的,因爲你一定會 發現在同時,一個解決方案,但這個問題不應該在 躺在查詢(這是確定),但在某些映射不一致或其他地方 (也許數據庫)。

相關問題