Do ponto de vista do JDBC, apenas trate a enumeração do PostgreSQL como uma string.
Citação de blog Converter entre enums Java e enums PostgreSQL:
O PostgreSQL permite que você crie tipos de enumeração usando a seguinte sintaxe:
CREATE TYPE animal_type AS ENUM('DOG', 'CAT', 'SQUIRREL');
Agora você pode usar 'animal' como um tipo de dados em suas tabelas, por exemplo:
create table pet ( pet_id integer not null, pet_type animal_type not null, name varchar(20) not null );
Em Java, você teria um tipo de enumeração correspondente:
public enum AnimalType { DOG, CAT, SQUIRREL; }
A conversão entre enums Java e PostgreSQL é simples. Por exemplo, para inserir ou atualizar um campo enum, você pode usar a sintaxe CAST em seu 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, ?);
O Postgres também permitirá que você insira/atualize uma enumeração apenas passando seu valor como uma string.
Se lançando ou não, o lado Java é o mesmo. Você definiria os campos assim:
stmt.setInt(1, 1); stmt.setString(2, AnimalType.DOG.toString()); stmt.setString(3, 'Rex');
Recuperar o enum de uma instrução SELECT é assim:
AnimalType.valueOf(stmt.getString("pet_type"));
Leve em consideração que as enumerações diferenciam maiúsculas de minúsculas, portanto, quaisquer incompatibilidades de maiúsculas e minúsculas entre as enumerações do Postgres e as enumerações do Java terão que ser consideradas. Observe também que o tipo de enumeração do PostgreSQL não é SQL padrão e, portanto, não é portátil.