无法使用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] 用于编码 这是我的密码:无法使用jooq vertx classic reactive插入json值:org.jooq.json无法强制为预期的类java.lang.Object,java,json,postgresql,vert.x,jooq,Java,Json,Postgresql,Vert.x,Jooq,我有一个包含3列的表,其中一列的类型是“json”。当我尝试插入值时(使用空json,但它是否为空并不重要,它以任何方式都不起作用。)然后我得到错误: java.lang.AssertionError:io.vertx.core.impl.NoStackTraceThrowable: 位于位置[1]的参数,类为[org.jooq.JSON],值为= [“{}”]无法强制为预期的类=[java.lang.Object] 用于编码 这是我的密码: @Override public Future&
@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));
}
@覆盖
公共未来保存实例(列表实例、字符串tenantId){
返回getQueryExecutor(tenantId).transaction(queryExecutor->queryExecutor.execute(dslContext->{
InsertValuesStep3 insertValues=dslContext.insertInto(INSTANCES,INSTANCES.INSTANCE_ID,
INSTANCES.JSON,INSTANCES.REQUEST_ID);
instances.forEach(instance->insertValues.values(instance.getInstanceId()、instance.getJson()、instance.getRequestId());
返回insertvalue;
})
.map(行->空);
}
getQueryExecutor(tenantId)返回ReactiveClassicGenericQueryExecutor对象
insatnce.getJson()reutns org.jooq.JSON类型
数据库是PostgreSQL。
我不想使用任何转换器等。文档中说jooq本机支持JSON和jsonb,但这里有什么问题?
我也没有为包含JSON或jsonb列的表生成行映射器
<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>
3.13.2
5.1.1
5.2.0
我对此感到困惑,任何建议都会有帮助。谢谢大家! 我得到了相同的错误,并通过添加到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>
io.vertx.core.json.JsonObject
io.github.jklingsporn.vertx.jooq.shared.postgres.JSONToJsonObjectConverter
[此处的列表达式]
(?i:JSON)
如果有JSONB列并指定其类型,则将JSONToJsonObjectConverter
替换为JSONBToJsonObjectConverter
。在表达式中,指定用于应用特定转换器的列(例如,仅列名称)
这将POJO中的org.jooq.JSON
类型替换为io.vertx.core.JSON.JsonObject
请小心选择兼容版本的vert.x
和vertx jooq