java - 无法使用 jooq-vertx-classic-reactive 插入 json 值:无法将 org.jooq.JSON 强制转换为预期的类 java.lang.Object
问题描述
我有 3 列的表,其中之一具有 'json' 类型。当我尝试插入值时(使用空 json,但它是否为空并不重要,它不会以任何方式工作。)然后我收到错误:
java.lang.AssertionError: io.vertx.core.impl.NoStackTraceThrowable: 位置 [1] 的参数,类 = [org.jooq.JSON] 和值 = ["{}"] 无法强制转换为预期的类 = [java.lang.Object] 用于编码。
这是我的代码:
@Override
public Future<Void> saveInstances(List<Instances> instances, String tenantId) {
return getQueryExecutor(tenantId).transaction(queryExecutor -> queryExecutor.execute(dslContext -> {
InsertValuesStep3<InstancesRecord, UUID, JSON, String> insertValues = dslContext.insertInto(INSTANCES, INSTANCES.INSTANCE_ID,
INSTANCES.JSON, INSTANCES.REQUEST_ID);
instances.forEach(instance -> insertValues.values(instance.getInstanceId(), instance.getJson(), instance.getRequestId()));
return insertValues;
})
.map(rows -> null));
}
getQueryExecutor(tenantId)返回 ReactiveClassicGenericQueryExecutor 对象 insatnce.getJson() reutns org.jooq.JSON 类型。
数据库是 PostgreSQL。 我不想使用任何转换器等。文档说 jooq 原生支持 JSON 和 jsonb,但是它们有什么问题呢?同样,我没有为包含 JSON 或 jsonb 列的表生成 rowMappers。
<jooq.version>3.13.2</jooq.version>
<vertx-jooq.generator.version>5.1.1</vertx-jooq.generator.version>
<vertx-jooq.classic-reactive.version>5.2.0</vertx-jooq.classic-reactive.version>
对此感到困惑,任何建议都会有所帮助。谢谢!
解决方案
我得到了同样的错误并通过添加到 pom.xml 来解决它:
<configuration>
<generator>
<database>
<forcedTypes>
<forcedType>
<userType>io.vertx.core.json.JsonObject</userType>
<converter>io.github.jklingsporn.vertx.jooq.shared.postgres.JSONToJsonObjectConverter</converter>
<expression>[column expression here]</expression>
<types>(?i:JSON)</types>
</forcedType>
</forcedTypes>
</database>
</generator>
</configuration>
替换JSONToJsonObjectConverter
为JSONBToJsonObjectConverter
, 如果您有 JSONB 列并指定它的类型。在表达式中,您指定应用特定转换器的列(例如,仅列名)。
这会将org.jooq.JSON
POJO 中的类型替换为io.vertx.core.json.JsonObject
.
小心选择vert.x
和的兼容版本vertx-jooq
。
推荐阅读
- node.js - 仅 http cookie Node.js,React 的会话管理问题
- php - json 文件到 mysql 数据库插入为“数组”的列
- aws-lambda - AppSync 与 AWS4 和混合身份验证类型(UserPools 和 IAM)
- firebase - Firebase 扩展删除用户数据不适用于 {DEFAULT} 存储桶
- javascript - 将动态布尔属性传递给 VueJS 组件
- asterisk - 如何在数据库中保存带星号的事件
- ssl - 路由器将自己的 SSL 证书而不是我的域提供给 LAN 主机
- tkinter - 如何从子窗口中的输入框中获取文本(字符串)值到变量中
- python - 如何在特定频道中允许特定消息不和谐 bot python
- shopify - Shopify:如何使自定义模板在主题编辑器中可编辑?