java - JOOQ:如何将外键解析为对象?

标签 java database orm jooq

假设我有一个表引用另一个表,在本例中“TestScenarios”引用“TestSchemas”。所以每个测试场景都有一个测试模式。 但是,我自动生成了 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快速获取任何给定子表的父表,例如

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

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

关于java - JOOQ:如何将外键解析为对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61823906/

相关文章:

sql - 免费/便宜的 PowerDesigner 替代品?

java - 如何在刷新之前获取 Hibernate Managed Entity 的数据库快照

java - Android:单例中的公共(public)变量和静态变量?

java - 如何在 Android 应用程序中使用 TensorflowInferenceInterface

mysql - sql查询根据兴趣匹配人

c# - EF7(核心)中同一个表的多个关系

json - 使用单个表绑定(bind)数组/结构中的多个列

java - 如何在从 Jframe 打开一段时间后关闭 JDialog

java - Spring & hibernate 配置(使用 Maven): java. lang.ClassNotFoundException : org. hibernate.cfg.Configuration

mysql - 玩吧!应用程序 : DB connections multiplied/how accurate are AWS RDS current DB connections?