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

jooq查询嵌套对象

楚奇逸
2023-03-14

有了jOOQ惊人的多集算子,我们能够查询嵌套列表并将其映射到pojo对象。现在,我试图找到一种方法来同时映射单个嵌套对象。例如,我有一个组合的自定义pojo类,如:

public class CourseComposite {
  private String courseName;
  private Teacher teacher;
  private List<Student> students;
  ...
}

我想在一个步骤中查询并获取它。因此,我目前的工作解决方案是:

static final List<? extends Field<?>> TEACHER_SUB_COLUMNS = Arrays.stream(TEACHER.fields()).map(f -> f.as("teacher." + f.getName())).collect(toList());

List<CourseComposite> getCourses() {
  return this.ctx()
      .select(COURSE.NAME.as("courseName"))
      .select(TEACHER_SUB_COLUMNS)
      .select(multiset(selectFrom(STUDENT).where(STUDENT.ID_COURSE.eq(COURSE.ID))).as("students"))
      .from(COURSE).innerJoin(TEACHER).on(COURSE.ID.eq(TEACHER.ID_COURSE))
      .where(...)
      .fetchInto(CourseComposite.class);
}

这包括一个预初始化的字段列表TEACHER_SUB_COLUMNS,其目的是以某种方式告诉JOOQ从“教师”映射教师对象。*”列。

我现在想知道在这方面是否有更直观的解决方案。我曾尝试使用row运算符,但到目前为止没有找到有效的解决方案。

例如

List<CourseComposite> getCourses() {
  return this.ctx()
      .select(COURSE.NAME.as("courseName"))
      .select(TEACHER_SUB_COLUMNS)
      .select(row(TEACHER.fields()).as("teacher"))
      .select(multiset(selectFrom(STUDENT).where(STUDENT.ID_COURSE.eq(COURSE.ID))).as("students"))
      .from(COURSE).innerJoin(TEACHER).on(COURSE.ID.eq(TEACHER.ID_COURSE))
      .where(...)
      .fetchInto(CourseComposite.class);
}

也许有人给了个提示

共有1个答案

顾俊茂
2023-03-14

您可能正在寻找功能请求#4727,其中Table

Result<Record3<String, TeacherRecord, Result<StudentRecord>>> result =
ctx().select(COURSE.NAME, TEACHER, multiset(...))
     .from(...)
     .fetch();

从jOOQ 3.16开始,还没有这样的便利(尽管这正在进行中)。

 类似资料:
  • 我正试图用jooq编写这个查询 我尝试了几件事,但没有成功。到目前为止,我只得到 如何将num列添加到结果中?感谢您的帮助。

  • jOOQ可以将查询结果映射到POJO中的多个嵌套列表吗?例如,我有一个POJO VM,它代表一个虚拟机。它具有'networks'属性,这是一个类型为network的列表。它还有一个'hdds'属性,这是一个类型为'hdd'的列表。该查询连接VM、HDD和Networks表。我是否可以“获取”到vm.class并期望jOOQ“做正确的事情”?

  • 让我们考虑一下这些帖子的集合。每个帖子都有一个评论数组,每个评论都有一个字符串数组,带有键“likes”,表示喜欢该评论的用户。 如何使用mongoose检查用户是否喜欢具有给定ID的评论?

  • 尊敬的弹性搜索专家, 我在查询嵌套对象时遇到问题。允许使用以下简化映射: 并将一些文档放在索引中: 现在我想执行这样的查询: 因此,我想得到匹配的公司与数量匹配的文件。因此,上面的查询应该会告诉我: 以下查询: 应该给我所有公司分配到一个文件,其标题包含“GPU”与匹配的文件数量: 如果表现良好,是否有可能实现这一结果?我显然对匹配的文档不感兴趣,只对匹配文档和嵌套对象的数量感兴趣。 谢谢你的帮助

  • 问题内容: 这是我在elasticsearch中存储在索引上的数据类型。我必须找到包含主要成分牛肉(且重量小于1000)和成分-(辣椒粉且重量小于250),(橄榄油和重量小于300)以及所有其他成分类似的食谱。 索引的映射是 我的查询是 但这给了Null。有人可以帮我吗?我认为我没有正确使用嵌套查询 问题答案: 试试这个:

  • 问题内容: 我有一个如下所示的elasticsearch索引集合, 现在,我需要通过匹配其值来搜索文档。(是一些字段,其值存储在其中)对于字段,如果与上面的文档匹配。 我尝试将其映射为嵌套对象,但是无法编写查询来搜索2个或更多匹配其各自值的查询。 问题答案: 这就是我要做的。您需要通过(或)两个嵌套查询对每个条件对进行AND 运算,因为您要匹配同一父文档中的两个不同的嵌套元素。