@OneToMany 或 @ManyToMany
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
在 JPA 中,你可能有一个像这样的 @OneToMany
映射
@Entity public class Author { @OneToMany(mappedBy = "author") private Set<Book> items; // [...] }
在 JPA 中,你可以指定此类关联是饥饿加载还是延迟加载。在 jOOQ 中,这无关紧要,因为你总是会通过查询显式地表达你的意图。没有任何事情是自动完成的。
从映射的角度来看,将一组(或列表,任何内容)子对象嵌套在父对象中可能很方便(无论这是 @OneToMany
还是 @ManyToMany
关系)。 在 jOOQ 中,这样的映射总是临时的,基于每个查询,因此不需要反映你的实际数据库模型。 例如,你可以轻松地将一组 Language
值“嵌套”在 BookStore
中,我们稍后会看到。 使用 jOOQ,嵌套直接在 SQL 中使用 ORDBMS 特性(原生或模拟)完成。
因此,你可能拥有像这样的 DTO,而不是拥有实体类(注意,我们可能不需要投影 ID
)
public record Book(String title) {} public record Author(String firstName, String lastName, List<Book> books) {}
DTO 可以是可重用的或临时的,每个查询都不同,这完全取决于你。 你可以将查询数据映射到上述记录中,如下所示
create.select( AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME, // Nested collection using to-many path correlation here: multiset( select(AUTHOR.book().TITLE) .from(AUTHOR.book()) // Ad-hoc converter here: ).convertFrom(r -> r.map(Records.mapping(Book::new)))) .from(AUTHOR) // Ad-hoc converter here .fetch(Records.mapping(Author::new));
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!