2012-07-06 32 views
17

Tôi đang sử dụng một khung công tác (Jodd) đang thêm bí danh bảng vào các tên cột trong một Chọn SQL. Nó trông giống như SQL được định dạng tốt, nhưng Postgres đã kích hoạt nó.Postgres sẽ không chấp nhận bí danh bảng trước tên cột

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

đưa ra một lỗi:

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

Có cách nào để có được Postgres chấp nhận SQL? Lựa chọn khác của tôi là hack khung công tác mà tôi không muốn làm.

+1

Bạn đã thử đặt chế độ bí danh tên cột khác nhau (http://jodd.org/doc/db/sqlgenerator.html#Column-name-aliasing) chưa? Theo mặc định, TABLE_REFERENCE được đặt - sẽ thêm các bí danh bảng cho các cột, nhưng bạn có thể thử hai số khác. Điều này có thể được thiết lập bởi phương thức DbOomManager # setDefaultColumnAliasType(), ở đâu đó khi khởi động ứng dụng. Ngoài ra, đừng ngần ngại liên hệ với Jodders bằng đoạn mã thực, họ sẵn sàng trợ giúp :) – igr

Trả lời

26

Vấn đề là bạn bao gồm bí danh bảng trong mệnh đề SET, trong các cột. Xem tài liệu của UPDATE in Postgres docs:

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.

này có giá trị trong Postgres:

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

Kiểm tra tài liệu về UPDATE tuyên bố, đặc biệt cho các cột phần: đó là bất hợp pháp tiền tố cột với bảng bí danh trong mệnh đề SET.

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

Hãy thử sử dụng Jodd mới nhất, v3.3.7. nơi sự cố này được khắc phục.

Sự cố nằm trong thư viện Jodd: phương pháp cập nhật thực thể đã tạo báo cáo cập nhật với bí danh bảng. Phiên bản mới chỉ đơn giản là không đặt bí danh bảng; cũng hoạt động cho Postgres và các cơ sở dữ liệu khác.

Các vấn đề liên quan