Theo quan điểm của JDBC, chỉ cần coi enum PostgreSQL như một chuỗi.
Trích dẫn blog Chuyển đổi giữa các enums Java và PostgreSQL enums:
PostgreSQL cho phép bạn tạo các kiểu enum bằng cú pháp sau:
CREATE TYPE animal_type AS ENUM('DOG', 'CAT', 'SQUIRREL');
Giờ đây, bạn có thể sử dụng 'động vật' làm kiểu dữ liệu trong bảng của mình, ví dụ:
create table pet ( pet_id integer not null, pet_type animal_type not null, name varchar(20) not null );
Trong Java, bạn sẽ có một kiểu enum tương ứng:
public enum AnimalType { DOG, CAT, SQUIRREL; }
Chuyển đổi giữa Java và PostgreSQL enums rất đơn giản. Ví dụ:để chèn hoặc cập nhật một trường enum, bạn có thể sử dụng cú pháp CAST trong SQL PreparedStatement:
INSERT INTO pet (pet_id, pet_type, name) VALUES (?, CAST(? AS animal_type), ?); --or INSERT INTO pet (pet_id, pet_type, name) VALUES (?, ?::animal_type, ?);
Postgres cũng sẽ cho phép bạn chèn / cập nhật một enum chỉ bằng cách chuyển giá trị của nó dưới dạng một chuỗi.
Dù ép kiểu hay không thì bên Java cũng vậy. Bạn sẽ đặt các trường như sau:
stmt.setInt(1, 1); stmt.setString(2, AnimalType.DOG.toString()); stmt.setString(3, 'Rex');
Truy xuất enum từ một câu lệnh SELECT có dạng như sau:
AnimalType.valueOf(stmt.getString("pet_type"));
Hãy lưu ý rằng enums có phân biệt chữ hoa chữ thường, vì vậy bất kỳ trường hợp nào không trùng khớp giữa enums Postgres của bạn và enums Java sẽ phải được tính đến. Cũng lưu ý rằng kiểu enum PostgreSQL là SQL không chuẩn và do đó không di động.