我正在使用 eclipselink 2.4.2。我必须执行一个使用 UNION 和 SELECT NEW 子句的查询。
我的jpa查询是这样的:
SELECT new com.*.*.MyObject(s.field1, s.field2, s.field3)
FROM MyEntityBean1 s WHERE s.someField = :someField UNION SELECT
new com.*.*.MyObject(s.field1, s.field2, s.field3)
FROM MyEntityBean2 s WHERE s.someField = :someField UNION SELECT ...
但是 eclipselink 在这个 sql 查询中转换它:
SELECT t0.COLUMN1, t0.COLUMN2, ... FROM
TABLE1 t1 WHERE (t1.COLUMN3 = ?)
UNION (SELECT FROM TABLE2 t2 WHERE (t2.COLUMN3 = ?)) UNION (...)
如您所见,第二个选择(和其他选择)为空,因此我收到此错误:
Internal Exception: java.sql.SQLSyntaxErrorException: ORA-00936: missing expression
如果不使用 SELECT NEW,我不会收到此错误,但我需要它,因为我在查询中使用的表(和 EntityBean)只有一些相等的字段。
谁能告诉我哪里出了问题或者是否是一个错误?
最佳答案
我找到了解决方案:
SELECT new com.*.*.MyObject(s.field1, s.field2, s.field3)
FROM MyEntityBean1 s WHERE s.someField = :someField UNION SELECT
s.field1, s.field2, s.field3
FROM MyEntityBean2 s WHERE s.someField = :someField UNION SELECT ...
只有第一个 SELECT 必须包含 NEW 运算符。
现在我还有一个问题,如何使用
ORDER BY
关于这个查询?
我尝试过这个:
SELECT s FROM (
SELECT new com.*.*.MyObject(s.field1, s.field2, s.field3)
FROM MyEntityBean1 s WHERE s.someField = :someField UNION SELECT
s.field1, s.field2, s.field3
FROM MyEntityBean2 s WHERE s.someField = :someField UNION SELECT ...
) s ORDER BY s.someField
但我收到此错误:
The right parenthesis is missing from the sub-expression. An identification variable must be provided for a range variable declaration.
有什么建议吗?
关于sql - Eclipselink UNION + 选择新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22476909/