【发布时间】:2020-10-17 02:24:48
【问题描述】:
要查询 PostgreSQL 10.11 数据库,我使用的是 jOOQ 3.12.4,它与 Spring Boot 2.2 捆绑在一起。
假设我使用 jOOQ 构建了一个查询,如下所示:
final String[] ids = ...;
final var query = dslContext.selectFrom(MY_TABLE).where(MY_TABLE.ID.in(ids));
final Map<String, List<MyTable>> changeDomains = query.fetch().intoGroups(MY_TABLE.ID, MyTable.class);
此代码运行良好并产生预期结果。但是当我重构我的查询并引入一个命名参数(以在我的代码的多个部分重用查询)时,如下所示:
final String[] ids = ...;
final var query = dslContext.selectFrom(MY_TABLE).where(MY_TABLE.ID.in(param("ids")));
final Map<String, List<MyTable>> changeDomains = query.bind("ids", ids).fetch().intoGroups(MY_TABLE.ID, MyTable.class);
我突然开始收到以下错误:
org.springframework.jdbc.BadSqlGrammarException: jOOQ; bad SQL grammar ...; nested exception is org.postgresql.util.PSQLException: ERROR: operator does not exist: text = character varying[]
Hinweis: No operator matches the given name and argument type(s). You might need to add explicit type casts.
编辑:我在使用时遇到同样的错误
MY_TABLE.ID.in(param("ids", String[].class))
改为。
我该如何解决或解决这个问题?
【问题讨论】:
-
你为什么要创建一个参数?
-
@SimonMartinelli 我想在我的代码的多个部分重用查询。因此,应该可以重新绑定参数,从而使查询适应这些代码部分的实际需求。
-
你可以试试 param("ids", String[].class)
-
@SimonMartinelli 我试过了,我得到了完全相同的错误。
标签: java sql postgresql jooq