使用EclipseLink在Oracle上执行查询时出现奇怪的行为

时间:2012-07-10 13:30:45

标签: java oracle jpa eclipselink named-query

我创建了一个命名查询,如下所示:

SELECT o
FROM TableName1Entity o , TableName2Entity a
WHERE o.field1 = a.field4
AND a.field5 = :param1

转换为以下sql:

SELECT TABLE_NAME1.FIELD1, TABLE_NAME1.FIELD2, TABLE_NAME1.FIELD3
FROM TABLE_NAME2 t0, TABLE_NAME1 t1
WHERE ((t0.FIELD4 = t1.FIELD1)
AND (t0.FIELD5 = ?));

然后返回ORA-00904: "TABLE_NAME1"."FIELD3": invalid identifier

但是当我手动修改时,它可以工作:(它们都按预期工作)

SELECT t1.FIELD1, t1.FIELD2, t1.FIELD3
FROM TABLE_NAME2 t0, TABLE_NAME1 t1
WHERE ((t0.FIELD4 = t1.FIELD1)
AND (t0.FIELD5 = ?));

SELECT TABLE_NAME1.FIELD1, TABLE_NAME1.FIELD2, TABLE_NAME1.FIELD3
FROM TABLE_NAME2 t0, TABLE_NAME1
WHERE ((t0.FIELD4 = TABLE_NAME1.FIELD1)
AND (t0.FIELD5 = ?));

SELECT FIELD1, FIELD2, FIELD3
FROM TABLE_NAME2 t0, TABLE_NAME1 t1
WHERE ((t0.FIELD4 = t1.FIELD1) AND (t0.FIELD5 = ?));

SELECT FIELD1, FIELD2, FIELD3
FROM TABLE_NAME2 t0, TABLE_NAME1
WHERE ((t0.FIELD4 = TABLE_NAME1.FIELD1)
AND (t0.FIELD5 = ?));

PS。:出于安全原因,我无法提供表格或字段名称。

事情是:当显式设置表名及其标签时,查询不起作用。

  

请不要通过更改命名查询来提供替代解决方案   因为它应该没问题,更改命名查询不是一个   选项。除非确实有错误。

2 个答案:

答案 0 :(得分:1)

你做了什么叫做别名:表TABLE_NAME必须在查询的选择部分中被称为label,因为它是如何通过其余部分命名(和看到)表的方式查询。

所以你必须写下这样的东西:

SELECT label.FIELD_NAME FROM TABLE_NAME label;

答案 1 :(得分:0)

将EclipseLink的版本从 1.1.1 更改为 2.0.0