提问人:localhost 提问时间:11/15/2023 更新时间:11/15/2023 访问量:16
SimpleFlatMapper:多个 1-N 关系
SimpleFlatMapper: Multiple 1-N relationship
问:
请参考此链接:
导入 java.util.List;
public class StudentDTO {
private Long id;
private String name;
private List<BookDTO> books;
//Getters and setters are omitted
}
这里有一本 1-N 关系书需要提取。 这是通过 addKeys 实现的。
但是,让我们说 POJO 是否是:
public class StudentDTO {
private Long id;
private String name;
private List<BookDTO> books;
private List<CourseDTO> courses;
//Getters and setters are omitted
}
那么我们怎样才能实现呢?
答:
1赞
Lukas Eder
11/15/2023
#1
我知道您选择使用 SimpleFlatMapper 是因为那篇文章推荐了它。但是 jOOQ 有一种更好的开箱即用的方法来映射多关系,请参阅 MULTISET
运算符。
假设你有一个属性的构造函数,甚至使用一个类型:record
public record StudentDTO(
Long id,
String name,
List<BookDTO> books,
List<CourseDTO> courses
{}
您现在可以编写如下查询:
List<StudentDTO> students =
ctx.select(
STUDENT.ID,
STUDENT.NAME,
multiset(
select(STUDENT_BOOK.book().ID, ...)
.from(STUDENT_BOOK)
.where(STUDENT_BOOK.STUDENT_ID.eq(STUDENT.ID))
).convertFrom(r -> r.map(Records.mapping(BookDTO::new))),
multiset(
select(STUDENT_COURSE.course().ID, ...)
.from(STUDENT_COURSE)
.where(STUDENT_COURSE.STUDENT_ID.eq(STUDENT.ID))
).convertFrom(r -> r.map(Records.mapping(CourseDTO::new)))
)
.from(STUDENT)
.fetch(Records.mapping(StudentDTO::new));
临时转换功能使整个事物类型安全。
评论
0赞
localhost
11/16/2023
您好,感谢您的评论。是的,这应该已经解决了问题。但是由于某种原因,我无法使用JOOQ。我只能使用 SimpleFlatMapper。
0赞
Lukas Eder
11/16/2023
@localhost:祝你好运。我不知道如何使用第三方库 SimpleFlatMapper 做这些事情。我真的建议回顾一下“某种原因”并升级到上述方法。但也许其他人可以回答你关于“SimpleFlatMapper”的原始问题
评论