@OneToOne 或 @ManyToOne
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
在 JPA 中,您可能拥有像这样的 @ManyToOne
映射
@Entity public class Book { @Id @GeneratedValue private Long id; @Column private String title; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "language_id") private Language language; // [...] }
在 JPA 中,您可以指定是否应急切或延迟获取此类关联。 在 jOOQ 中,这无关紧要,因为您始终会通过查询显式表达您的意图。 没有任何事情是自动完成的。
从映射的角度来看,将父对象嵌套在子对象中(无论这是 @OneToOne
还是 @ManyToOne
关系)可能很方便。 在 jOOQ 中,这样的映射始终是临时的,基于每个查询,因此它不需要反映您的实际数据库模型。 例如,您可以轻松地将 Title
“嵌套”在 Book
中。 使用 jOOQ,嵌套直接在 SQL 中使用 ORDBMS 功能(原生或模拟)完成。
因此,您可以拥有像这样的 DTO(而不是实体类)(请注意,我们可能不需要投影 ID
)
public record Language(String code, String description) {} public record Book(String title, Language language) {}
DTO 可以是可重用的或临时的,每个查询,完全取决于您。 您可以将查询数据映射到上面的记录中,如下所示
create.select( BOOK.TITLE, // Nested record here: row( // Implicit join here BOOK.language().CD, BOOK.language().DESCRIPTION // Ad-hoc converter here: ).mapping(Language::new)) .from(BOOK) // Ad-hoc converter here .fetch(Records.mapping(Book::new));
上面的映射是完全编译时类型安全的。
本节中使用的一些 jOOQ 功能是
反馈
您对此页面有任何反馈吗? 我们很乐意听到它!