通常的方法是将单个查询结果映射到一个类,例如.

List<MyPojo> p = ctx.fetch("select * from table...").into(MyPojo.class);

但是如果我想基于几个查询结果构建一个pojo呢?请注意,一些pojo字段是对象.

class MyPojo{
  String field1 - query1
  int field2 - query1
  List<SomeClass> field3 - query2
  SomeClass2 - query3
  ...
}

我真的很感激你的任何 idea .

推荐答案

显然,您可以通过运行多个查询并将结果分别组装到结果类型中来手动映射代码(在jOOQ中没有自动方法).但比这更好的是,只要使用

例如:

List<MyPojo> result =
ctx.select(
      T.FIELD1,
      T.FIELD2,
      multiset(
        select(U.COL1, U.COL2)
        .from(U)
        .where(U.T_ID.eq(T.ID))
      ).convertFrom(r -> r.map(Records.mapping(SomeClass::new))),
      field(
        select(row(X.COL1, X.COL2).mapping(SomeClass2::new))
        .from(X)
        .where(X.T_ID.eq(T.ID))
      ))
   .from(T)
   .fetch(Records.mapping(MyPojo::new));

所有这些都是完全类型安全的,不使用任何反射.要使这些构造函数引用生效,只需将构造函数添加到MyPojo中,或者将其设为record:

record MyPojo(
  String field1,
  int field2,
  List<SomeClass> field3,
  SomeClass2 field4
) {}

Java相关问答推荐

在Java中使用带限制的回归打印星形三角形

通过推送通知向自己发送Matrix消息

在现有Json文件中添加新记录

将linkedHashMap扩展到Java中的POJO类

Java事件系统通用转换为有界通配符

如何在Android上获取来电信息

Springdoc Whitelabel Error Page with Spring V3

使用标记时,场景大纲不在多个线程上运行

Java记录的不同序列化/反序列化

Java中如何根据Font.canDisplay方法对字符串进行分段

为什么Java编译器不区分不同类型的方法?

如何在JavaFX中制作鼠标透明stage

SpringBoot:在条件{Variable}.isBlank/{Variable}.isEmpty不起作用的情况下进行路径变量验证

使用While循环打印素数,无法正常工作

来自外部模块的方面(对于Java+Gradle项目)不起作用

通过Java列表中的某些字段搜索值

验证没有';t work on Hibernate Entity';s字段

[jdk21][Foreign Function&;Memory API]MemoryLayout::varHandle通过可变数组进行 struct 化的问题

如何在Selenium上继续使用最新的WebDriver版本

Maven创建带有特定类的Spring Boot jar和普通jar