【问题标题】:JOOQ: How to resolve foreign keys as objects?JOOQ:如何将外键解析为对象?
【发布时间】: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;

【问题讨论】:

    标签: java database orm jooq


    【解决方案1】:

    DAO 没有这样的功能,但使用 jOOQ 的 DSL API,您可以使用 implicit joins 快速获取任何给定子表的父表,例如

    ctx.select(TestScenarios.asterisk(), TestScenarios.TestSchemas().asterisk())
       .from(TestScenarios)
       .fetch();
    

    还有其他方法,但例如,JPA 提供的“对象图持久性”永远不会自动实现。 jOOQ 的理念是始终明确地表达每个查询 - 可能会从一些映射糖中受益,但绝不会隐式地自动获取整个对象图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-12
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 2017-03-18
      • 1970-01-01
      • 2021-11-23
      • 2012-02-11
      相关资源
      最近更新 更多