的休眠手册这样说: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