Запрос JdbcTemplate возвращает исключение BadSqlGrammarException - PullRequest
1 голос
/ 29 января 2020

Postgres дБ:

CREATE TYPE pr_status_name AS ENUM ('CREATED', 'SUCCESS', 'FAILED');

create table payment_request_statuses(
    status_id serial PRIMARY KEY,
    pr_status_name pr_status_name NOT NULL
);

INSERT INTO payment_request_statuses(pr_status_name) VALUES ('CREATED');
INSERT INTO payment_request_statuses(pr_status_name) VALUES ('SUCCESS');
INSERT INTO payment_request_statuses(pr_status_name) VALUES ('FAILED');

, когда я пытаюсь выполнить метод:

        Map<String, Object> data = jdbcTemplate.queryForMap("select * from payment_request_statuses where pr_status_name = ?", new Object[]{"CREATED"});

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

rg.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [select * from payment_request_statuses where pr_status_name = ?]; nested exception is org.postgresql.util.PSQLException: ERROR: operator does not exist: pr_status_name = character varying
  Hint: No operator matches the given name and argument types. You might need to add explicit type casts.

Кажется, jdbcTemplate по какой-то причине не может преобразовать / сопоставить строку в db объект Enum, что меня удивляет.

Как я могу это исправить?

1 Ответ

1 голос
/ 29 января 2020

Вам нужно разыграть от String до Enum в SQL.

Map<String, Object> data = jdbcTemplate.queryForMap("select * from payment_request_statuses where pr_status_name = ?::pr_status_name", new Object[]{"CREATED"});
...