跨多个分支的 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。
我想避免的一个问题是两个分支更新 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。