Java jOOQ-具有多对多关系的嵌套对象
我一直在试图找出如何从jOOQ查询转换嵌套对象。 我见过RecordMapper或Java8流作为可能的解决方案,但我很难弄清楚如何使用它们 我的对象看起来与此类似,师生关系为N:N,学生用书为1:NJava 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是否可用
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版本可能会通过