【问题标题】:Hibernate unknown column休眠未知列
【发布时间】:2014-03-05 20:48:15
【问题描述】:

我正在尝试使用以下方法获取 s.eventTime 的日期月份和年份:

DAY(s.eventTime) as theDay, MONTH(s.eventTime) as theMonth, YEAR(s.eventTime) as theYear

然后我用GROUP BY theYear, theMonth, theDay

这给了我错误:org.hibernate.exception.SQLGrammarException: Unknown column 'theYear' in 'group statement'

我之前在 SQL 中使用过这种方法,想知道在 HQL 中是否无效?如果是这样,有人有什么建议吗?

【问题讨论】:

    标签: java hibernate hql


    【解决方案1】:

    不要在列上使用别名。用他们的名字来称呼他们。就像这个例子一样 http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html#queryhql-grouping

    select cat
    from Cat cat
        join cat.kittens kitten
    group by cat.id, cat.name, cat.other, cat.properties
    having avg(kitten.weight) > 100
    order by count(kitten) asc, sum(kitten.weight) desc
    

    【讨论】:

      【解决方案2】:

      您似乎不能将day()month()year()as 一起转换,所以我选择了如下:

      DAY(s.eventTime), MONTH(s.eventTime), YEAR(s.eventTime)
      

      然后用相同的方式分组:

      GROUP BY DAY(s.eventTime), MONTH(s.eventTime), YEAR(s.eventTime)
      

      【讨论】:

        【解决方案3】:

        Expressionssecond(...), minute(...), hour(...), day(...), month(...), and year(...)只能用在where子句中。

        如果您需要执行无法通过 HQL 生成的查询,您始终可以在数据库中创建一个视图,并使用 Hibernate 将该视图映射为一个实体。它的工作方式与表格相同。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-10-07
          • 2013-02-10
          • 2014-03-19
          • 1970-01-01
          • 2017-04-11
          • 2015-05-28
          • 2016-01-05
          • 1970-01-01
          相关资源
          最近更新 更多