2012-07-10 32 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