的休眠手冊這樣說: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_」等)它工作正常。
謝謝。
那麼,不管查詢是如何組成的,它仍然返回一個對象數組。如果我有一個連接兩次連接同一個表的連接,它只是重複該表而不是爲該行提供第二個實例。 – Matt 2010-07-30 09:03:06
你能解釋一下嗎?我不太理解。 – rebelliard 2010-07-30 12:36:27
好吧,讓我說,我這樣做,它會返回兩個tableB結果在每一行。所以說.List將返回一個數組,如: pos 0:[tableB] [tableB] pos 1:[tableB] [tableB] 但是第一個(在每一行中)tableB結果(id和這樣)應該不同於第二張表B的結果。但不是。它只是重複 – Matt 2010-07-30 21:50:12