我有一个必须将SQL转换为HQL的要求。

SQL查询如下:

select RT.tableNumber, temp.confirmationNumber from ReservationTable RT, (select R.tableNumber, R.confirmationNumber from Reservation R where R.date = 'someDate' and R.time = 'someTime' and R.reservationStatus = 'CONFIRMED') as temp where RT.tableNumber = temp.tableNumber and RT.tableNumber = 'someTableNumber' ;


我尝试将其转换为以下HQL:

select RT.tableNumber, temp.confirmationNumber from ReservationTable RT, (select R.tableNumber, R.confirmationNumber from Reservation R where R.date = :param1 and R.time = :param2 and R.reservationStatus = 'CONFIRMED') as temp where RT.tableNumber = temp.tableNumber and RT.tableNumber = :param3";


但是,当我通过Eclipse运行此HQL时,出现以下错误行:


  错误:第1:102行:意外令牌:(
  
  错误:第1:146行:意外令牌:来自
  
  严重:Servlet [dispatcher]中的Servlet.service()与
  路径[/ RRSRestApp]引发异常[请求处理失败;嵌套的
  异常是org.hibernate.hql.internal.ast.QuerySyntaxException:
  意外令牌:(靠近第1行,第102列[选择RT.tableNumber,
  来自的temp.confirmationNumber
  com.kartik.restaurant.model.ReservationTable RT,(选择
  来自的R.tableNumber,R.confirmationNumber
  com.kartik.restaurant.model.Reservation R,其中R.date =:param1和
  R.time =:param2和R.reservationStatus ='CONFIRMED')作为温度
  RT.tableNumber =临时表Number和RT.tableNumber =:param3; ]]
  根本原因是org.hibernate.hql.internal.ast.QuerySyntaxException:
  意外令牌:(靠近第1行,第102列[选择RT.tableNumber,
  来自的temp.confirmationNumber
  com.kartik.restaurant.model.ReservationTable RT,(选择
  来自的R.tableNumber,R.confirmationNumber
  com.kartik.restaurant.model.Reservation R,其中R.date =:param1和
  R.time =:param2和R.reservationStatus ='CONFIRMED')作为温度
  RT.tableNumber =临时表Number和RT.tableNumber =:param3; ]


谁能帮我这个?

最佳答案

根据休眠文档,HQL子查询只能在select或where子句中发生。

for more detail please follow hibernate documentation

07-27 13:50