hibernate手册说:
String sql =“SELECT ID as {c.id},NAME as {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 :(得分: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();
答案 1 :(得分:0)
我只是出于学习目的处理你的问题,因为你肯定会 同时找到了解决方案,但问题不在于此 查询(没关系),但在一些映射不一致或其他地方 (也许数据库)。