Hibernate未知列

时间:2014-03-05 20:48:15

标签: java hibernate hql

我试图通过使用

来获取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中是否无效?如果是这样,有人有建议吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您似乎无法将day()month()year()投放到as,所以我选择了以下内容:

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

然后以相同的方式分组:

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

答案 2 :(得分:0)

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

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