Как найти перечисление в списке строк по запросу postgresql? - PullRequest
1 голос
/ 25 октября 2019

Рассмотрим оператор SQL:

select * from table where status in <statuses>

Где статус - это перечисление:

CREATE TYPE statusType AS ENUM (
  'enum1',
  'enum2';

В Java у меня есть список перечислений в строковом представлении:

List<String> list = new ArrayList<>();
list.add("enum1");
list.add("enum2");

Затем я пытаюсь построить и выполнить запрос, используя SqlStatement:

handle.createQuery("select * from table where status in <statuses>")
                    .bindList("statuses", statuses)
                    .map(Mapper.instance)
                    .list());

Я получаю следующую ошибку:

org.jdbi.v3.core.statement.UnableToExecuteStatementException: org.postgresql.util.PSQLException: ERROR: operator does not exist: status = character varying
  Hint: No operator matches the given name and argument types. You might need to add explicit type casts.

Я пытался обернуть каждый элемент списка с помощьюCAST (enum1 как statusType) или enum1 :: statusType, но не повезло.

Любая помощь приветствуется.

1 Ответ

1 голос
/ 25 октября 2019

Вы можете привести перечисление к тексту

handle.createQuery("select * from table where status::text in <statuses>")
                .bindList("statuses", statuses)
                .map(Mapper.instance)
                .list());
...