sql - Eclipselink UNION + 选择新

标签 sql jpa eclipselink union

我正在使用 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/

相关文章:

sql - 计算 BigQuery 重复字段中的值

php - 在smarty模板系统中使用PHP从数据库中获取SUM

mysql - 从双连接表中选择最大值

java - Guice 合成方法警告

java - EclipseLink JTA 持久性问题(空指针异常)

java - JPA "The multi-part identifier ... could not be bound"

sql - 如何只检查日期时间字段上的时间而忽略日期?

java - Spring Data PostgreSQL Key already exists 错误2

Java JPA 从 oracle 数据库检索 blob 作为其原始文件类型

hibernate - 在删除实体之前,删除其父引用(如果有)