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:如何将外键解析为对象?的主要内容,如果未能解决你的问题,请参考以下文章

Django如何将外键传递给ModelForm字段

使用 pg-promise 格式化 JSON 输出,将外键封装为对象

Fluent NHibernate - 如何将外键列映射为属性

Django:如何将外键检查设置为 0

首次使用实体框架代码时将外键设置为 null

ajax调用时如何将外键传递给json数据?