Java jOOQ-具有多对多关系的嵌套对象

Java jOOQ-具有多对多关系的嵌套对象,java,many-to-many,one-to-many,jooq,Java,Many To Many,One To Many,Jooq,我一直在试图找出如何从jOOQ查询转换嵌套对象。 我见过RecordMapper或Java8流作为可能的解决方案,但我很难弄清楚如何使用它们 我的对象看起来与此类似,师生关系为N:N,学生用书为1:N Student { List<Teacher> teachers List<Book> books; } 现在我想使用jooq查询这些表,并将其转换为包含其他表的Student对象。有没有直截了当的方法?有没有例子说明如何实现这一点? intoGroups是否可用

我一直在试图找出如何从jOOQ查询转换嵌套对象。 我见过RecordMapper或Java8流作为可能的解决方案,但我很难弄清楚如何使用它们

我的对象看起来与此类似,师生关系为N:N,学生用书为1:N

Student {
  List<Teacher> teachers
  List<Book> books;
}
现在我想使用jooq查询这些表,并将其转换为包含其他表的Student对象。有没有直截了当的方法?有没有例子说明如何实现这一点? intoGroups是否可用于类似于此的模式?如果我分组,我会得到加入数据库的所有不同类型记录的列表吗

我还可以做两个查询,这应该不是什么问题。 谢谢。

在jOOQ 3.14之前 从历史上看,jOOQ没有为多对多关系提供任何映射解决方案。使用源自SQL联接的平面结果集是不容易实现的,在这种情况下,不相关实体之间的笛卡尔积在教师和书本之间并不少见

使用两个或多个查询的解决方案是可能的,但是有许多手工编写的映射代码是人们希望避免的

在jOOQ 3.14之后 从一开始,这将相对容易地成为可能。本质上,您将使用RDBMS的原生XML或JSON支持直接在SQL中嵌套集合

假设使用代码生成器,可以编写如下查询:

列出学生名单= ctx.selectjsonObject jsonEntryname,STUDENT.NAME, jsonEntryid,STUDENT.ID, JSONENTRytachers,字段 选择jsonarrayagjsonobjectteacher.NAME、TEACHER.ID .来自老师 .join学生\教师.onTEACHER.ID.eqs学生\教师.教师\ ID .where STUDENT\u TEACHER.STUDENT\u ID.eqSTUDENT.ID , jsonEntrybooks,字段 选择jsonarrayagjsonobjectbook.NAME、BOOK.ID .fromBOOK .join学生书.onBOOK.ID.eqSTUDENT学生书.BOOK.ID .where STUDENT\u BOOK.STUDENT\u ID.eqSTUDENT.ID fromSTUDENT先生 .fetchIntoStudent.class; 请注意,JSON_ArrayAg将空集聚合为NULL,而不是空[]

未来的jOOQ版本可能会通过jOOQ 3.14之前的

进一步简化这种用法 从历史上看,jOOQ没有为多对多关系提供任何映射解决方案。使用源自SQL联接的平面结果集是不容易实现的,在这种情况下,不相关实体之间的笛卡尔积在教师和书本之间并不少见

使用两个或多个查询的解决方案是可能的,但是有许多手工编写的映射代码是人们希望避免的

在jOOQ 3.14之后 从一开始,这将相对容易地成为可能。本质上,您将使用RDBMS的原生XML或JSON支持直接在SQL中嵌套集合

假设使用代码生成器,可以编写如下查询:

列出学生名单= ctx.selectjsonObject jsonEntryname,STUDENT.NAME, jsonEntryid,STUDENT.ID, JSONENTRytachers,字段 选择jsonarrayagjsonobjectteacher.NAME、TEACHER.ID .来自老师 .join学生\教师.onTEACHER.ID.eqs学生\教师.教师\ ID .where STUDENT\u TEACHER.STUDENT\u ID.eqSTUDENT.ID , jsonEntrybooks,字段 选择jsonarrayagjsonobjectbook.NAME、BOOK.ID .fromBOOK .join学生书.onBOOK.ID.eqSTUDENT学生书.BOOK.ID .where STUDENT\u BOOK.STUDENT\u ID.eqSTUDENT.ID fromSTUDENT先生 .fetchIntoStudent.class; 请注意,JSON_ArrayAg将空集聚合为NULL,而不是空[]

未来的jOOQ版本可能会通过