对于本例,我使用的是Sakila Sample Database。
假设我有一条Film
记录,如下所示:
public record Film(UShort filmId, String title) {
}
如果我正在阅读jOOQ中的影片,我可以使用以下命令轻松地将它们Map到Film
:
List<Film> films = this.context.select(Tables.FILM.FILM_ID, Tables.FILM.TITLE)
.from(Tables.FILM)
.limit(10)
.fetch(Records.mapping(Film::new));
现在假设我需要每部电影以及与之相关的演员,为此,我决定使用multiset
:
Set<SelectField<?>> readFields = Set.of(
Tables.FILM.FILM_ID,
Tables.FILM.TITLE,
DSL.multiset(
DSL.select(Tables.FILM_ACTOR.actor().FIRST_NAME, Tables.FILM_ACTOR.actor().LAST_NAME)
.from(Tables.FILM_ACTOR)
.where(Tables.FILM_ACTOR.FILM_ID.eq(Tables.FILM.FILM_ID))
)
.as("actors")
);
var result = this.context.select(readFields)
.from(Tables.FILM)
.limit(10)
.fetch();
现在我有了结果,我想将它们Map到记录FilmActors
中:
public record FilmActors(UShort filmId, String title, List<Actor> actors) {
public record Actor(String firstName, String lastName) {
}
}
有没有办法自动完成,或者在ModelMapper这样的库的帮助下完成?如果可能的话,我希望避免滚动定制的RecordMapper
。谢谢!
我尝试使用jOOQ的内置Records
类,并尝试查看ModelMapper是否支持记录。
1条答案
按热度按时间bqf10yzr1#
我想在 *Using ad hoc converter on nested collection * 下找到了一个答案here。
convertFrom
做到了这一点: