【问题标题】:NHibernate CreateSqlQuery and addEntityNHibernate CreateSqlQuery 和 addEntity
【发布时间】:2010-07-30 02:10:55
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: mysql nhibernate hibernate


    【解决方案1】:

    你到底想做什么?我相信您可能不需要使用其中任何一个。

    // 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();
    

    【讨论】:

    • 好吧,不管查询是如何构成的,它仍然返回一个对象数组。如果我有一个连接两次连接同一个表,它只会重复该表,而不是为该行提供第二个实例。
    • 您能进一步解释一下吗?我不太明白。
    • 好吧,假设我这样做 SELECT 它将在每行返回两个 tableB 结果。所以说 .List 将返回一个数组,如: pos 0: [tableB][tableB] pos 1: [tableB][tableB] 但是第一个(在每一行中)tableB 结果(id 等)应该与第二个 tableB 不同结果。但它不是。只是重复
    • 我相信 OP 正在使用 CreateSQLQuery。您的回答没有解决这个问题。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多