2012-07-10 56 views
0

甲骨文执行查询时,我创建了一个namedquery如下:奇怪的行为与EclipseLink的

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:出于安全原因,我不能给表或字段名称。

事情是:当表名被明确设置以及标签给它时,查询不起作用。

请不要改变命名查询 给替代解决方案,因为它应该是罚款,是和更改命名查询是不是 选项。除非它真的有错误。

+0

你没有表现出命名查询;一个已命名的查询属于ORM的世界,并且不是写入SQL(对于该表具有这种别名“标签”的SQL)。看看[什么是命名查询](http://stackoverflow.com/questions/4517069/what-is-a-named-query) – 2012-07-10 13:43:41

+1

和JPA的实现是?因为将JPQL查询转换为SQL与实现 – DataNucleus 2012-07-10 15:07:50

+0

JPA 1.0.2与EclipseLink 1.1.1 – w35l3y 2012-07-10 16:42:11

回答

0

变化从1.1.1版本的EclipseLink到2.0.0

1

你做了什么,它被称为走样:表TABLE_NAME必须在查询的选择一部分,因为它是如何的表由其余查询命名(和看到的)被称为label

所以,你必须写类似:

SELECT label.FIELD_NAME FROM TABLE_NAME label; 
+0

完全相关,但我没有任何控制如何转换指定的查询。 :/ 查询是**自动**转换就像第一个例子。 – w35l3y 2012-07-10 13:40:21

+0

然后请发布生成该查询的代码! – 2012-07-10 13:46:36