【问题标题】:What would the corresponding HQL query for this TSQL query?这个 TSQL 查询对应的 HQL 查询是什么?
【发布时间】: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


【解决方案1】:

试试这个:

CASE
    WHEN D_Id <> 120 THEN 
        (SELECT 
            D.D_Name 
        FROM 
            Department AS D 
        WHERE 
            D.D_Id = D_Id)
    WHEN D_Id = 120 THEN 
        (SELECT 
            DR.DR_DepartmentOther 
        FROM 
            DataRequest AS DR 
        WHERE 
            DR.DR_Id = DR_Id)
END

【讨论】:

    猜你喜欢
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 2011-05-26
    • 2014-02-27
    • 1970-01-01
    相关资源
    最近更新 更多