我有一个必须将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