NHibernate CreateSqlQuery和addEntity

时间:2010-07-30 02:10:55

标签: mysql nhibernate hibernate

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_”等),它可以正常工作。

感谢。

2 个答案:

答案 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)

我只是出于学习目的处理你的问题,因为你肯定会 同时找到了解决方案,但问题不在于此 查询(没关系),但在一些映射不一致或其他地方 (也许数据库)。