【发布时间】:2014-09-17 11:47:00
【问题描述】:
我希望用 HQL 重写 TSQL 查询。这是我要转换为 HQL 查询的 T-SQL 查询。以下 T-SQL 查询运行良好。
DECLARE @D_Id INT = 120
DECLARE @DR_Id INT = 1100
IF @D_Id <> 120
BEGIN
SELECT
d.D_Name
FROM
Department AS d
WHERE
d.D_Id = @D_Id
END
ELSE
BEGIN
SELECT
DR.DR_DepartmentOther
FROM
DataRequest AS DR
WHERE
DR.DR_Id = @DR_Id
END
我想要相应的 HQL 查询。我编写了以下 HQL 查询:
CASE
WHEN D_Id <> 120
SELECT
D.D_Name
FROM
Department AS D
WHERE
D.D_Id = D_Id
WHEN D_Id = 120
SELECT
DR.DR_DepartmentOther
FROM
DataRequest AS DR
WHERE
DR.DR_Id = DR_Id
END
当我执行上述 HQL 查询时,我收到以下错误:
执行 Hibernate 查询时出错。
java.sql.SQLException: [Macromedia][SQLServer JDBC 驱动程序][SQLServer]关键字“SELECT”附近的语法不正确。
【问题讨论】:
-
为什么不决定在 Java 代码中执行哪个查询呢? hibernate.atlassian.net/browse/HHH-467 似乎不支持子选择。
-
当我在 Reactor (ColdFusion) 中使用它时,我必须进行内联查询。
-
在这种情况下,我只是使用
entityManager.createNativeQuery()运行原始SQL
标签: sql sql-server hibernate tsql hql