繁体   English   中英

如何在不使用 JOOQ 重新部署的情况下删除 mysql 列

[英]How to drop a mysql column without redeploying with JOOQ

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

我正在为表使用 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);
}

您似乎正在使用selectFrom(Table) 如果 jOOQ 知道列列表,它将始终从SELECT子句中的Table.fields()生成显式列列表。 这应该有更好的文档记录

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

  • 您可以在表中添加一列而无需重新生成 jOOQ 代码
  • 您不能只从表中删除一列而不重新生成 jOOQ 代码

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM