【问题标题】:Why does Grails 2.4 add blobs to my database for contained domain objects?为什么 Grails 2.4 为包含的域对象向我的数据库中添加 blob?
【发布时间】:2014-09-04 22:03:42
【问题描述】:

我们刚刚从 Grails 2.2.1 升级到 Grails 2.4.2

修复所有问题后,我们注意到我们的一些 MySQL 数据库表有一些额外的列。

这是场景:

class User {
    String username;
}

class Report {
    User issuedBy;
}

在升级之前,我们用于报告的 MySQL 表如下所示:

|id:int|version:int|issued_by_id:int|

升级后是这样的:

|id:int|version:int|issued_by_id:int|issued_by:blob|

我不知道为什么会这样,并且不希望我们的生产数据库在我部署新版本后发生变化。

有谁知道这个额外的字段是什么,它来自哪里以及它的作用?

【问题讨论】:

    标签: grails grails-orm


    【解决方案1】:

    我认为不应该存在额外的字段,因为这种关系是简单的 ManyToOne,默认情况下应该由“issued_by_id”数据库字段表示。

    尝试重新运行“dbm-generate-changelog”,检查它是否创建了额外的字段。如果是这样,可能值得在 Grails JIRA 中提出问题。

    【讨论】:

    • 它可能值得一个 JIRA,但你不应该相信生成的代码,或者在这种情况下生成的变更日志。它很有可能是正确的,但您必须在应用更改之前验证这一点。该插件不承诺无错误的轻松迁移,只是它可以让您获得大部分的成功,并希望最大限度地减少人为干预的数量。
    • 我运行了更改日志,它突出显示了更多不需要的更改。升级已经为派生类生成了表,即使我们使用的是逐层表,并且实际生成的 MySQL 查询会通过正确的共享表。
    • 这两个问题看起来都像是 JIRA 值得关注的问题。看起来我要在 2.3.9 上停留一段时间:(
    • 这不是 100%。我上面列出的例子是人为的,我没有测试过。我们域类层次结构中包含的每个对象都没有生成额外的 blob。我不知道究竟是什么情况下重新创建了这个,这意味着创建一个有用的 JIRA 很困难。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    相关资源
    最近更新 更多