Dari sudut pandang JDBC, perlakukan enum PostgreSQL seperti string.
Mengutip blog Konversi antara enum Java dan enum PostgreSQL:
PostgreSQL memungkinkan Anda membuat tipe enum menggunakan sintaks berikut:
CREATE TYPE animal_type AS ENUM('DOG', 'CAT', 'SQUIRREL');
Anda sekarang dapat menggunakan 'hewan' sebagai tipe data di tabel Anda, misalnya:
create table pet ( pet_id integer not null, pet_type animal_type not null, name varchar(20) not null );
Di Java, Anda akan memiliki jenis enum yang sesuai:
public enum AnimalType { DOG, CAT, SQUIRREL; }
Mengonversi antara enum Java dan PostgreSQL sangatlah mudah. Misalnya, untuk menyisipkan atau memperbarui bidang enum, Anda dapat menggunakan sintaks CAST di 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 juga memungkinkan Anda menyisipkan/memperbarui enum hanya dengan meneruskan nilainya sebagai string.
Apakah casting atau tidak, sisi Jawa adalah sama. Anda akan mengatur bidang seperti ini:
stmt.setInt(1, 1); stmt.setString(2, AnimalType.DOG.toString()); stmt.setString(3, 'Rex');
Mengambil enum dari pernyataan SELECT terlihat seperti ini:
AnimalType.valueOf(stmt.getString("pet_type"));
Mempertimbangkan bahwa enum peka terhadap huruf besar/kecil, jadi setiap ketidakcocokan kasus antara enum Postgres Anda dan enum Java harus diperhitungkan. Perhatikan juga bahwa tipe enum PostgreSQL adalah SQL non-standar, dan karenanya tidak portabel.