JOOQ:如何将外键解析为对象?
Posted
技术标签:
【中文标题】JOOQ:如何将外键解析为对象?【英文标题】:JOOQ: How to resolve foreign keys as objects? 【发布时间】:2020-09-01 13:18:48 【问题描述】:假设我有一个引用另一个表的表,在这种情况下,“TestScenarios”引用“TestSchemas”。所以每个 TestScenario 都有一个 TestSchema。 但是,我自动生成了 DAO,当通过 DAO 获取 TestScenario 实例时,TestSchema 字段是一个整数,而不是一个 TestSchema 对象。我怎样才能让 JOOQ 将外键直接解析为一定深度的对象?
CREATE TABLE "TestScenarios"
(
id integer DEFAULT nextval('"TestScenarios_id_seq"'::regclass) NOT NULL,
name varchar,
version bigint,
"testSchema" integer,
);
ALTER TABLE "TestScenarios"
ADD CONSTRAINT "TestScenarios_pkey"
PRIMARY KEY (id);
ALTER TABLE "TestScenarios"
ADD CONSTRAINT "testSchemaFk" FOREIGN KEY ("testSchema")
REFERENCES "TestSchemas" (id)
ON UPDATE NO ACTION
ON DELETE NO ACTION;
COMMIT;
【问题讨论】:
【参考方案1】:DAO 没有这样的功能,但使用 jOOQ 的 DSL API,您可以使用 implicit joins 快速获取任何给定子表的父表,例如
ctx.select(TestScenarios.asterisk(), TestScenarios.TestSchemas().asterisk())
.from(TestScenarios)
.fetch();
还有其他方法,但例如,JPA 提供的“对象图持久性”永远不会自动实现。 jOOQ 的理念是始终明确地表达每个查询 - 可能会从一些映射糖中受益,但绝不会隐式地自动获取整个对象图。
【讨论】:
以上是关于JOOQ:如何将外键解析为对象?的主要内容,如果未能解决你的问题,请参考以下文章
使用 pg-promise 格式化 JSON 输出,将外键封装为对象