簡體   English   中英

使用EclipseLink在Oracle上執行查詢時的奇怪行為

[英]Strange behaviour when executing query on Oracle with EclipseLink

我創建了一個namedquery,如下所示:

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:出於安全原因,我無法提供表或字段名稱。

問題是:當表名和它的標簽一起顯式設置時,查詢將不起作用。

請不要通過更改命名查詢來提供替代解決方案,因為這樣應該可以,並且更改命名查詢不是一種選擇。 除非它確實有錯誤。

完成的操作稱為別名:在查詢的選擇部分中,表TABLE_NAME必須稱為label ,因為表其余的查詢是這樣命名該表的。

因此,您必須編寫如下內容:

SELECT label.FIELD_NAME FROM TABLE_NAME label;

將EclipseLink的版本從1.1.1更改為2.0.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM