@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 功能是
反馈
您对此页面有任何反馈吗? 我们很乐意听到它!