【发布时间】:2012-10-04 14:16:41
【问题描述】:
我在使用 Hibernate 时遇到以下异常:
JPAQueryException 发生:执行查询时出错 select f from Flyer as f join f.events as e where e.start > ?和 e.start 1 组按 f 顺序按 sqrt((-118.39419-f.venue.lng) * (-118.39419-f.venue.lng)+(34.024353-f.venue.lat)*(34.024353-f.场地.lat)) asc:错误:列“venue2_.lng”必须出现在 GROUP BY 子句中或用于聚合函数中
上面显示了查询的 HQL。 HQL生成的SQL如下:
选择 flyer0_.id 作为 id345_,flyer0_.venue_id 作为venue77_345_ 从 flyer0_.id=events1_.flyer_id 上的 flyer0_ 内部加入事件 events1_ 交叉加入场地场地 2_ where flyer0_.venue_id=venue2_.id 和 events1_.start>?和 events1_.start1 组按 flyer0_.id 顺序按 sqrt((-118.39419-venue2_.lng)*(-118.39419-venue2_.lng)+(34.024353-venue2_.lat)*(34.024353-venue2_.lat)) asc 限制?
表格是传单、活动和场地。
事件表跟踪传单的开始和停止时间......一个传单可以在多天重复......因此有多个事件。
每个传单都有一个场地,传单上的广告将在此举行。
就我的数据库而言,我正在使用 Heroku PostgreSQL Crane,如以下 URL 中所述。我相信它使用 PostgreSQL 9.1:
- https://postgres.heroku.com/blog/past/2012/5/3/crane_the_new_50_per_month_production_database_/
- https://addons.heroku.com/heroku-postgresql
- https://devcenter.heroku.com/articles/heroku-postgresql
在休眠方面,我正在使用的 Play Framework 1.2.5 似乎使用:
- org.hibernate -> hibernate-core 3.6.10.Final
- org.hibernate -> hibernate-commons-annotations 3.2.0.Final
- org.hibernate -> hibernate-entitymanager 3.6.10.Final
- org.hibernate -> hibernate-validator 4.1.0.Final
我的问题是导致 JPAQueryException 的原因,我该如何解决?
谢谢!
【问题讨论】:
-
这应该在 PostgreSQL 9.2 中工作,因为 GROUP BY 子句包括主键的处理方式发生了变化。在以前的版本中,也许您也可以在 GROUP BY 中列出 SELECT 列表中的所有列,或者说服 Hibernate?什么Pg版本?休眠版本?
-
我正在使用 Heroku Postgres Crane。我猜这里 (devcenter.heroku.com/articles/heroku-postgresql) 说他们使用的是 PostgreSQL 9.1。
-
在 Hibernate 方面,我使用的是 Play Framework 1.2.5,它使用以下内容:hibernate-core 3.6.10.Final, hibernate-commons-annotations 3.2.0.Final, hibernate- entitymanager 3.6.10.Final, hibernate-validator 4.1.0.Final
标签: hibernate postgresql heroku playframework hql