2014-07-25 1 views
0

TSQL 쿼리를 HQL로 다시 작성하고 싶습니다. 다음은 HQL 쿼리로 변환하려는 T-SQL 쿼리입니다. 다음 T-SQL 쿼리가 올바르게 작동합니다.이 TSQL 쿼리에 해당하는 HQL 쿼리는 무엇입니까?

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 쿼리가 필요합니다.

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 쿼리를 실행하면 :

Error while executing the Hibernate query.

java.sql.SQLException: [Macromedia][SQLServer JDBC Driver][SQLServer]Incorrect syntax near the keyword 'SELECT'.

+0

왜에있는 쿼리를 결정하지 나는 다음과 같은 HQL 쿼리를 작성했습니다 Java 코드에서 실행 하시겠습니까? 하위 선택과 같은 https://hibernate.atlassian.net/browse/HHH-467은 지원되지 않습니다. – Andreas

+0

Reactor (ColdFusion)에서 인라인 쿼리를 사용해야합니다. –

+0

이 경우 나는'entityManager.createNativeQuery()'를 사용하여 원시 SQL을 실행한다. – Bohemian

답변

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 
관련 문제