You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

嵌套MULTISET/ROW转换及JSON模拟引发ClassCastException问题

jOOQ嵌套Multiset子查询类型序列化异常

执行包含子查询的多列查询,且该子查询嵌套在multiset中时,预期结果应匹配指定类型,但实际嵌套结果仍为ArrayList,未正确序列化为目标类型。

问题复现步骤

record Tuple2(String t1, String t2) {}

var result = db.select(
    multiset(
        select(
            row(
                multiset(
                    select(
                        row("Hello", "World").mapping(Tuple2::new)
                    ).from(dual())
                ).convertFrom(r -> r.map(Record1::component1))
            ).mapping(r -> r)
        ).from(dual())
    ).convertFrom(r -> r.map(Record1::component1))
).from(dual())
.fetchOne(Record1::component1);

log.debug("The result: {}", result);
log.debug("The tuple: {}", result.get(0).get(0));
log.debug("The type of the result: {}", result.get(0).get(0).getClass());

预期result类型为List<List<Tuple2>>,实际却为ArrayList<ArrayList<ArrayList>>(推测是row类型的原始表示)。

代码输出

The result: [[[[Hello, World]]]]
The tuple: [[Hello, World]]
An unhandled error occurred
java.lang.ClassCastException: class java.util.ArrayList cannot be cast to class com.mycompany.mypackage.MyClass$1Tuple2 (java.util.ArrayList is in module java.base of loader 'bootstrap'; com.mycompany.mypackage.MyClass$1Tuple2 is in unnamed module of loader 'app')

环境信息

  • jOOQ版本:3.17.8
  • 数据库:MySQL 8.0.28
  • Java版本:openjdk version "19.0.1" 2022-10-18
  • JDBC驱动:mysql:mysql-connector-java:8.0.31

内容的提问来源于stack exchange,提问作者Matt Snider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 21:42:42