JOOQ:如何将外键解析为对象?
JOOQ: How to resolve foreign keys as objects?
假设我有一个 table 引用另一个 table,在这种情况下 "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;
DAO 没有这样的功能,但是使用 jOOQ 的 DSL API,您可以使用 implicit joins 快速获取任何给定子 table 的父 table =],例如
ctx.select(TestScenarios.asterisk(), TestScenarios.TestSchemas().asterisk())
.from(TestScenarios)
.fetch();
还有其他方法,但是永远不会有任何关于 "object graph persistence" 的自动方式,例如 JPA 提供它的方式。 jOOQ 的理念是始终明确地表达每个查询——也许从一些映射糖中获益,但永远不要隐式地自动获取整个对象图。
假设我有一个 table 引用另一个 table,在这种情况下 "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;
DAO 没有这样的功能,但是使用 jOOQ 的 DSL API,您可以使用 implicit joins 快速获取任何给定子 table 的父 table =],例如
ctx.select(TestScenarios.asterisk(), TestScenarios.TestSchemas().asterisk())
.from(TestScenarios)
.fetch();
还有其他方法,但是永远不会有任何关于 "object graph persistence" 的自动方式,例如 JPA 提供它的方式。 jOOQ 的理念是始终明确地表达每个查询——也许从一些映射糖中获益,但永远不要隐式地自动获取整个对象图。