当前位置: 首页 > 知识库问答 >
问题:

如何在JOOQ 3.11中转换JSONB

沈华晖
2023-03-14

我正试图从JSONB转换为Google GSON JSONElement。我使用的转换器来自:https://www.jooq.org/doc/3.11/manual/code-generation/custom-data-type-bindings/

< forcedTypes >
    < forcedType >
        < userType>com.google.gson.JsonElement< /userType >
        < binding  >connection.JsonType< /binding >
        < types >.*json.*< /types >
    < /forcedType >
< /forcedTypes >
List<JooqPojo> data = DBConnection.sqlFetch(sql).into(JooqPojo.class)
public static Result<Record> sqlFetch(String query) {
    Result<Record> val = createDSL(conn).fetch(query);
    return val;
}
Exception in thread "pool-18-thread-5" org.jooq.exception.MappingException: An error ocurred when mapping record to class public.tables.pojos.RawMSObj
at org.jooq.impl.DefaultRecordMapper$MutablePOJOMapper.map(DefaultRecordMapper.java:828)
at org.jooq.impl.DefaultRecordMapper.map(DefaultRecordMapper.java:481)
at org.jooq.impl.ResultImpl.into(ResultImpl.java:1372)
at tables.RawMSTable.getMatches(RawMSTable.java:61)
at task.MSTask$update$runnable$1.run(MSTask.kt:38)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.jooq.exception.DataTypeException: Cannot convert from {"json": data} (class org.postgresql.util.PGobject) to class com.google.gson.JsonElement
at org.jooq.tools.Convert$ConvertAll.fail(Convert.java:1166)
at org.jooq.tools.Convert$ConvertAll.from(Convert.java:1055)
at org.jooq.tools.Convert.convert0(Convert.java:321)
at org.jooq.tools.Convert.convert(Convert.java:313)
at org.jooq.tools.Convert.convert(Convert.java:385)
at org.jooq.impl.AbstractRecord.get(AbstractRecord.java:245)
at org.jooq.impl.DefaultRecordMapper$MutablePOJOMapper.map(DefaultRecordMapper.java:790)
... 7 more

TableImpl中的列:

 public final TableField<RawfixturesRecord, JsonElement> FIXTURE = createField("fixture", org.jooq.impl.DefaultDataType.getDefaultDataType("\"pg_catalog\".\"jsonb\""), this, "", new JsonType());

共有1个答案

丌官晨
2023-03-14

您使用的是普通的SQL API,在这种情况下,jOOQ只是获取SQL输入字符串并运行它。在运行语句时,它不能应用任何转换器或绑定,因此JSONB映射信息不能应用。这会导致结果集中出现字符串值(我怀疑),这些值不能自动映射到JSONElement

您必须使用jOOQ DSL来运行查询。

 类似资料:
  • 问题内容: 我是Java的新手,想知道double转换为int cast如何工作吗?我知道,只需将低32位转换为int就很容易了,但是将double(64位)转换为int(32位)呢?来自二进制的double中的那64位是Double- precision浮点格式(Mantissa),那么它如何在内部转换为int? 问题答案: 所有这些都记录在JLS的5.1.3节中。 第一步,将浮点数转换为lon

  • 我有一个Map,其中键是字符串,值是逗号分隔的值列表。 我如何才能逆转键/值对的顺序,并分配给新Map,使键成为值,值成为键 所以: 变成: 一种可能的解决方案是迭代每个值,然后迭代每个键,搜索相同的对应值。如果找到,将这个新的键/值对添加到一个新映射中。这似乎效率低下? 解决方案(使用公认的答案实施):

  • 本文向大家介绍在JavaScript中NaN如何转换为String?,包括了在JavaScript中NaN如何转换为String?的使用技巧和注意事项,需要的朋友参考一下 您可以尝试运行以下命令以了解如何在JavaScript中将NaN转换为String- 示例

  • 问题内容: 我要转换: 变成“ 5小时前” 如何用Java做到这一点? 问题答案: JodaTime支持从用户定义的格式进行解析。请参见DateTimeFormatterBuilder和DateTimeBuilder.parseDateTime()。 一旦有了DateTime,就可以从该时间和当前时间创建一个Duration或Period,并使用另一个格式化程序进行漂亮的打印。[请参阅上面的注释中

  • 我在Spark中有一个数据框架,其中包含许多列和我定义的udf。我想要返回相同的数据帧,除了一列被转换。此外,我的udf接收字符串并返回时间戳。有一个简单的方法可以做到这一点吗?我试过了 但这返回一个RDD,并且只返回转换后的列。

  • 有人知道如何在Python中将JSON转换为XLS吗? 我知道可以使用Python中的包创建文件。 如果我想将数据直接转换为文件,该怎么办? 有办法存档吗?