Fra JDBC's synspunkt skal du bare behandle PostgreSQL enum som en streng.
Citerer blog Konverter mellem Java enums og PostgreSQL enums:
PostgreSQL giver dig mulighed for at oprette enum-typer ved hjælp af følgende syntaks:
CREATE TYPE animal_type AS ENUM('DOG', 'CAT', 'SQUIRREL');
Du kan nu bruge 'dyr' som datatype i dine tabeller, for eksempel:
create table pet (
pet_id integer not null,
pet_type animal_type not null,
name varchar(20) not null
);
I Java vil du have en tilsvarende enum-type:
public enum AnimalType {
DOG,
CAT,
SQUIRREL;
}
Konvertering mellem Java og PostgreSQL enums er ligetil. For at indsætte eller opdatere et enum-felt kan du f.eks. bruge CAST-syntaksen i din 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 vil også lade dig indsætte/opdatere en enum blot ved at overføre dens værdi som en streng.
Uanset om du kaster eller ej, er Java-siden den samme. Du ville indstille felterne sådan her:
stmt.setInt(1, 1);
stmt.setString(2, AnimalType.DOG.toString());
stmt.setString(3, 'Rex');
Hentning af enum fra en SELECT-sætning ser sådan ud:
AnimalType.valueOf(stmt.getString("pet_type"));
Tag i betragtning, at der skelnes mellem store og små bogstaver i enums, så der skal tages højde for eventuelle uoverensstemmelser mellem dine Postgres-enums og Java-enums. Bemærk også, at PostgreSQL enum-typen er ikke-standard SQL og derfor ikke bærbar.