От гледна точка на JDBC, просто третирайте изброяването на PostgreSQL като низ.
Цитиране на блог Преобразуване между изброяванията на Java и изброяванията на PostgreSQL:
PostgreSQL ви позволява да създавате типове enum, като използвате следния синтаксис:
CREATE TYPE animal_type AS ENUM('DOG', 'CAT', 'SQUIRREL');
Вече можете да използвате „животно“ като тип данни във вашите таблици, например:
create table pet ( pet_id integer not null, pet_type animal_type not null, name varchar(20) not null );
В Java ще имате съответен тип enum:
public enum AnimalType { DOG, CAT, SQUIRREL; }
Преобразуването между изброяванията на Java и PostgreSQL е лесно. Например, за да вмъкнете или актуализирате поле за изброяване, можете да използвате синтаксиса CAST във вашия 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 също така ще ви позволи да вмъквате/актуализирате изброяване, само като предавате стойността му като низ.
Независимо дали се предава или не, Java страната е една и съща. Бихте задали полетата така:
stmt.setInt(1, 1); stmt.setString(2, AnimalType.DOG.toString()); stmt.setString(3, 'Rex');
Извличането на enum от оператор SELECT изглежда така:
AnimalType.valueOf(stmt.getString("pet_type"));
Вземете под внимание, че изброяванията са чувствителни към малки и големи букви, така че всички несъответствия между вашите изброявания на Postgres и изброяванията на Java ще трябва да бъдат отчетени. Също така имайте предвид, че типът изброяване на PostgreSQL е нестандартен SQL и следователно не е преносим.