【问题标题】:Translating from SQL enquiry to HQL enquiry problem从 SQL 查询转换为 HQL 查询问题
【发布时间】:2011-05-25 08:51:37
【问题描述】:

我只是几天的休眠用户,我遇到了一个问题。

我不知道如何将此 SQL 查询转换为 HQL:

SELECT name, street, city, description
    , (SELECT AVG(rate) 
      FROM user_restaurant_rating 
      WHERE user_restaurant_rating.restaurant_id = restaurants.id) AS rate 
FROM restaurants 
ORDER BY rate DESC 
LIMIT 0,3

我已经阅读了一些教程,但还没有找到如何翻译它。

提前谢谢你。

【问题讨论】:

  • 您创建了什么样的映射。哪个表由哪个模型类表示?

标签: java sql hibernate hql


【解决方案1】:

The Hibernate reference 表示支持 select 子句中的子选择。因此,您应该能够编写

select r.name, r.street, r.city, r.description, (select avg(ur.rate) from UserRestaurantRating ur where ur.restaurant.id = r.id) rate from Restaurant r order by rate desc

【讨论】:

  • 我会得到一个错误:org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是 org.hibernate.hql.ast.QuerySyntaxException:意外令牌:第 1 行附近的费率,第 132 列 [select r.name, r.street, r.city, r.description, (select avg(ur.rate) from user_restaurant_rating ur where ur.restaurant_id = r.id) 餐厅价格 r order by rate desc]
  • 试过了,现在出现新错误:org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是 org.hibernate.hql.ast.QuerySyntaxException: 餐厅未映射 [select r.name, r.street, r.city, r.description, (select avg(ur.rate) from user_restaurant_rating ur where ur.restaurant_id = r.id) 作为餐厅的价格 r order by rate desc]
  • 您不能使用表(餐厅)的名称,而是映射到表的实体的名称(我在回答中假设为“餐厅”)。这些表的映射是什么?
  • 好吧,我将实体餐厅映射为餐厅。当在查询中将餐厅更改为餐厅时,eclipse 丢弃了同样的错误
  • 如果类名是“Restaurant”,则必须使用“Restaurant”。案例很重要。 Hibernate 查询使用实体,而不是表。你为什么不向我们展示你的类和映射?
猜你喜欢
  • 1970-01-01
  • 2013-07-02
  • 2014-06-26
  • 1970-01-01
  • 2021-11-02
  • 2017-07-12
  • 2012-09-06
  • 1970-01-01
  • 2018-06-20
相关资源
最近更新 更多