嵌套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
相关产品推荐
相关产品推荐

