【问题标题】:how to make first column nullable in one to many relationship join table?如何使一对多关系连接表中的第一列可以为空?
【发布时间】:2018-10-02 06:17:19
【问题描述】:

从 grails 2 到 grails3 的行为似乎发生了变化。当我创建一对多的关系时,例如

class Author {
    static hasMany = [books: Book]
    String name
}
class Book {
    String title
}

它将创建一个包含 author_books_id 和 book_id 列的连接表。在 grails 3 中,它还在第一列上添加了一个非空约束。在 grails 2 中,不应用非空约束。因此,当我升级到 grails 3 时,它会中断,因为已经很少有记录的第一列值为空。它在 grails 2 中运行良好,但在 grails 3 中,第一列不应为空。此外,连接表是只读的,因此我无法删除行将使第一列值变为空。有没有办法通过在域中而不是直接在迁移文件中进行更改来使第一列可以为 null = true。

代码是从 grails 文档中提取的。请向下滚动到一对多部分。

6.2.1.2 一对多

http://docs.grails.org/3.0.17/guide/GORM.html

【问题讨论】:

  • 我不知道为什么连接表中存在一行不将 2 个东西连接在一起的行...连接表中一侧为空的行似乎没用,应该是删除。也就是说......您不必让 grails 创建您的表,并且您可以在创建这些表后对其进行修改,如果您需要删除该约束,您可以。

标签: grails grails3


【解决方案1】:

尝试将您的 Book 类更改为此

class Book {
    String title
    Author author     // this creates the belongs to relationship
}

static constraints = {
     author nullable:true
}

此外,当您重新编译代码时,请确保删除以前的表并重新开始。 Grails 不会更改任何表来删除任何内容。它只会添加新的东西。

【讨论】:

    猜你喜欢
    • 2016-09-20
    • 2015-03-22
    • 1970-01-01
    • 2013-10-17
    • 2018-06-14
    • 2013-01-23
    • 1970-01-01
    • 2010-11-25
    • 2017-09-04
    相关资源
    最近更新 更多