0

次のように名前付きクエリを作成しました。

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 .:セキュリティ上の理由から、テーブルまたはフィールドの名前を付けることはできません。

問題は、テーブル名がラベルとともに明示的に設定されている場合、クエリが機能しないことです。

名前付きクエリを変更して代替ソリューションを提供しないでください。そのままで問題なく、名前付きクエリを変更することはできません。本当にエラーがない限り。

4

2 に答える 2

1

あなたが行ったことはエイリアシングと呼ばれます。テーブルは、クエリの残りの部分でテーブルに名前が付けられる (および表示される) 方法であるため、クエリの選択部分でTABLE_NAME参照する必要があります。label

したがって、次のように書く必要があります。

SELECT label.FIELD_NAME FROM TABLE_NAME label;
于 2012-07-10T13:35:47.377 に答える
0

EclipseLink のバージョンを1.1.1から2.0.0に変更します。

于 2013-09-12T14:41:39.233 に答える