【问题标题】:Creating VIEW statement in Jooq在 Jooq 中创建 VIEW 语句
【发布时间】:2025-11-23 20:35:01
【问题描述】:

我正在尝试使用 Jooq 创建视图语句,我们该怎么做?

或者我们还有其他选择吗?

Jooq 版本:3.0.1

【问题讨论】:

  • 你能再具体一点吗?你想表达一个 DDL CREATE VIEW x AS SELECT ... 语句,还是想在 jOOQ 中创建一个“视图”,即一个模拟子选择但行为像表的对象?
  • @Lukas,我想创建视图,我想如果我只是想访问创建的视图,Jooq Generator 工具可以做到吗?
  • 是的,生成器处理视图就像它们是表格一样......我会创建一个答案

标签: java sql view jooq


【解决方案1】:

jOOQ 不支持创建视图。如jOOQ home page 所述:

  • 何时不使用 jOOQ:
    • ...
    • 当您需要编写 DDL 语句时。 jOOQ 仅支持 DML 语句。
    • ...

CREATE VIEW 是 DDL,而不是 DML。

【讨论】:

  • 这是真的,尽管最近在 jOOQ User Group 上对 CREATE VIEW 语句使用 jOOQ 提出了挑战。如果您在 jOOQ 生成的 SELECT 语句前面加上 CREATE OR REPLACE VIEW 子句,原则上没有什么可以阻止您使用 jOOQ 创建视图
【解决方案2】:

在 jOOQ 3.1 中没有明确支持 CREATE VIEW DDL 语句,尽管 some users on the user group 已经在挑战 jOOQ 以非正式地支持它。由于这可能是一个常见的用例,因此将其放在路线图上可能是有意义的:#2582

在添加任何官方支持之前,您仍然可以使用纯 SQL:

DSLContext ctx = DSL.using(...);
ctx.execute("CREATE OR REPLACE VIEW my_view AS {0};",
    select(a, b).from(my_table).where(...)
);

上面的示例使用DSLContext.query(...) 构造以jOOQ QueryPart 对象作为参数的普通SQL 查询。

【讨论】: