2012-07-06 30 views
17

sütun adından önce tablo takma adını kabul etmeyecek Bir tabloyu bir SQL Seçimi'nde sütun adlarına ekleyen bir çerçeve (Jodd) kullanıyorum. İyi oluşturulmuş SQL gibi görünüyor, ancak Postgres üzerinde boğuluyor. Postgres o SQL kabul almanın bir yoluPostgres,

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

var mı:

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

hata veriyor? Benim diğer alternatifim yapmak istemediğim çerçeveyi kırmak.

+1

Farklı sütun adı takma modunu ayarlamayı denediniz mi (http://jodd.org/doc/db/sqlgenerator.html#Column-name-aliasing)? Varsayılan olarak TABLE_REFERENCE ayarlanır - sütunlar için tablo takma adları eklenir, ancak diğer ikisini de deneyebilirsiniz. Bu, uygulama başlangıcında bir yerde DbOomManager # setDefaultColumnAliasType() yöntemi ile ayarlanabilir. Ayrıca, gerçek kod snippet'i ile Jodder'lara başvurmaktan çekinmeyin, yardımcı olmaya istekli olduklarını :) – igr

cevap

26

Sorun, tablo takma adlarını SET maddesinde sütunlara eklemenizdir. Özellikle kolon kısmı için, UPDATE ekstresinde

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

Kontrol belgeleri:

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.

Bu Postgres geçerlidir: UPDATE in Postgres docs belgelerine bakın o tabloyla sütunları öneki için yasa dışıdır SET maddesindeki diğer ad.

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

son Jodd, v3.3.7 kullanmayı deneyin. bu sorunun düzeltildiği yer.

Sorun, Jodd kitaplığındaki sorun oldu: varlık güncelleme yöntemleri, tablo diğer adlarıyla güncelleme deyimi oluşturuyordu. Yeni sürüm, masa takma adlarını içermez; Bu Postgres ve diğer veritabanları için de çalışıyor.