跨多个分支的 JOOQ 代码生成策略

JOOQ code generation strategy across multiple branches

我想避免的一个问题是两个分支更新 JOOQ 生成的代码。我想这会导致混乱的合并冲突。是否有使用 JOOQ 跨两个不同分支管理数据库更改的最佳实践策略?

未来的 jOOQ 多模式版本支持

多模式版本代码生成将在 https://github.com/jOOQ/jOOQ/issues/9626

的未来版本中推出

在 jOOQ 3.15 中开始了上述所需基础设施的工作。有很多工作和悬而未决的问题,但最终,将有可能定义一组应同时支持的源模式:

  • 通过代码生成
  • 按运行时(例如 * 仅包含给定版本中可用的列)

使用 SQL 次观看

滚动你自己的

在那之前,您也许可以使用视图自行建立兼容层。例如:

-- Version 1
CREATE TABLE t (
  id INT PRIMARY KEY,
  col1 TEXT,
  col2 TEXT
);

-- Version 2
CREATE TABLE t (
  id INT PRIMARY KEY,
  -- col1 was dropped
  col2 TEXT,
  -- col3 was added
  col3 TEXT
);

现在为两个版本的客户端代码部署一个看起来相同的视图:

-- Version 1
CREATE OR REPLACE VIEW v (id, col1, col2, col3) AS
SELECT id, col1, col2, NULL
FROM t;

-- Version 1
CREATE OR REPLACE VIEW v (id, col1, col2, col3) AS
SELECT id, NULL, col2, col3
FROM t;

如果您的 RDBMS 支持 updatable 视图,您可以像使用任何其他视图一样使用它们 table,尤其是在将 synthetic primary keys / synthetic foreign keys 添加到生成的代码中时。

使用 generator strategy,您可以进一步将生成的视图名称 V 重命名为 T(假设您不生成实际的 T),并且您的客户端代码甚至不会注意到您使用视图模拟了 T table。