如何使用eclsipe链接JPA在UNION查询中使用order?

时间:2014-01-06 11:45:36

标签: jpa eclipselink

我使用eclipse链接作为我的JPA。我有以下使用UNION和ORDER BY的SQL查询。

select * from (SELECT * FROM RQST p WHERE  RQST_ID ='14962709' 
UNION
SELECT * FROM RQST q WHERE PARNT_RQST_ID IN (SELECT RQST_ID FROM RQST WHERE  
PARNT_RQST_ID  ='14962709'))ORDER BY RQST_DT_TM;

现在工作正常我想将其转换为JPQL。我在我的代码中写了以下内容

select req from 
( select req from Rqst req WHERE ( req.parntRqstId =:PARENT_REQUEST)  
  UNION select reqs from Rqst reqs where reqs.parntRqstId in 
    ( select req.rqstId from Rqst req  WHERE (req.parntRqstId =:PARENT_REQUEST) 
  ) 
)
ORDER BY req.rqstDtTm

但是这就是投掷

java.lang.IllegalArgumentException:The right parenthesis is missing from the sub-expression.
An identification variable must be provided for a range variable declaration.
The query contains a malformed ending.

任何人都可以告诉我哪里出错了吗?

1 个答案:

答案 0 :(得分:1)

您可以使用OR条件重新格式化JPA查询以达到相同的效果:

(查询未经过测试,请考虑更改)

select req from Rqst req WHERE ( req.parntRqstId =:PARENT_REQUEST)  
    OR reqs.parntRqstId in ( select req.rqstId from Rqst req  WHERE (req.parntRqstId =:PARENT_REQUEST) )) ORDER BY req.rqstDtTm

或者使用原生查询。

PS:在JPA中不支持UNION,但在EclipseLink中有。