JdbcTemplate 查询 returns BadSqlGrammarException
JdbcTemplate query returns BadSqlGrammarException
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 无法 transform/match 字符串到 db 枚举对象,这让我感到惊讶。
我该如何解决?
您需要在 SQL 中将字符串转换为枚举。
Map<String, Object> data = jdbcTemplate.queryForMap("select * from payment_request_statuses where pr_status_name = ?::pr_status_name", new Object[]{"CREATED"});
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 无法 transform/match 字符串到 db 枚举对象,这让我感到惊讶。
我该如何解决?
您需要在 SQL 中将字符串转换为枚举。
Map<String, Object> data = jdbcTemplate.queryForMap("select * from payment_request_statuses where pr_status_name = ?::pr_status_name", new Object[]{"CREATED"});