2012-07-06 15 views
17

私はSQLセレクトのカラム名にテーブルエイリアスを追加するフレームワーク(Jodd)を使用しています。整形式のSQLのように見えますが、Postgresはそれを突きつけます。 PostgresはそのSQLを受け入れるように取得する方法はPostgresはカラム名の前にテーブルエイリアスを受け付けません

Error: ERROR: column "greeting" of relation "greeting" does not exist 
SQLState: 42703 

あります:

update GREETING Greeting 
    set Greeting.ID=5, 
     Greeting.NAME='World', 
     Greeting.PHRASE='Hello World!' 
where (Greeting.ID=5) 

はエラーになりますか?私の他の選択肢は、私がしたくないフレームワークをハックすることです。

+1

別の列名エイリアシングモード(http://jodd.org/doc/db/sqlgenerator.html#Column-name-aliasing)を設定しようとしましたか?デフォルトではTABLE_REFERENCEが設定されています。これは列のテーブルのエイリアスを追加しますが、他の2つを試すこともできます。これは、アプリケーションの起動時にDbOomManager#setDefaultColumnAliasType()メソッドによって設定できます。また、実際のコードスニペットでJoddersに連絡するのをためらうことはありません。 – igr

答えて

26

問題は、テーブルの別名をSET句の列に含めることです。特に一部について、UPDATE文で

update GREETING Greeting 
set 
    NAME='World', 
    PHRASE='Hello World!' 
where Greeting.ID=5 ; 
3

チェックドキュメント:

column

The name of a column in table. The column name can be qualified with a subfield name or array subscript, if needed. Do not include the table's name in the specification of a target column — for example, UPDATE tab SET tab.col = 1 is invalid.

これはPostgresのに有効です。UPDATE in Postgres docsのドキュメントを参照してください、テーブルの列の前に付けることは違法ですエイリアスはSET句にあります。

UPDATE GREETING Greeting 
    SET ID=5, NAME='World', PHRASE='Hello World!' 
WHERE (Greeting.ID=5); 
4

最新のJodd、v3.3.7をお試しください。この問題は修正されています。

Joddライブラリに問題がありました。エンティティの更新メソッドがテーブルエイリアスで更新ステートメントを生成していました。新しいバージョンは単にテーブルエイリアスを置かない。これはPostgresや他のデータベースにも有効です。

関連する問題