【问题标题】:How to drop a mysql column without redeploying with JOOQ如何在不使用 JOOQ 重新部署的情况下删除 mysql 列
【发布时间】:2020-03-11 15:54:25
【问题描述】:

我想从数据库中删除一列而不同时重新部署应用程序。

我正在为表使用 JOOQ 生成的文件,并且我已经从代码中删除了该字段的所有用法,因此没有“获取”或“设置”字段,但是当获取记录时,该字段仍在询问。因此,如果我删除该列,代码将中断。

我正在考虑编辑 JOOQ 生成的文件,但不确定这是否可行,因为这些字段似乎在其中编号(可能基于它们在表中的索引)。

/**
 * Setter for <code>database.person.email</code>.
 */
public void setEmail(String value) {
    set(7, value);
}

/**
 * Getter for <code>database.person.email</code>.
 */
public String getEmail() {
    return (String) get(7);
}

【问题讨论】:

    标签: mysql jooq flyway


    【解决方案1】:

    您似乎在使用selectFrom(Table)。如果 jOOQ 知道列列表,它将始终在 SELECT 子句中从 Table.fields() 生成显式列列表。 This should probably be better documented.

    这种行为(而不是生成SELECT *)的后果是:

    • 无需重新生成 jOOQ 代码即可向表中添加列
    • 您不能在不重新生成 jOOQ 代码的情况下从表中删除一列

    但是,理想情况下,您应该始终在投影中使用明确的列列表,而不是投影所有列,除非您仍然需要其中的大部分。这不仅可以防止这种问题在大多数情况下发生,还可以通过各种方式提高性能。

    我正在考虑编辑 JOOQ 生成的文件,但不确定这是否可行,因为这些字段似乎在其中编号(可能基于它们在表中的索引)。

    如果编辑这些文件是一种选择,那么重新生成和重新部署也可能是一种选择。我建议不要手动编辑这些文件。如果必须,请确保编辑生成的 TableTableRecord 类,并调整所有列索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-20
      • 2017-04-22
      • 2018-02-07
      • 2015-06-14
      • 1970-01-01
      • 2020-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多