如何使一对多关系连接 table 中的第一列可为空?

how to make first column nullable in one to many relationship join table?

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

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

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

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

6.2.1.2 一对多

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

尝试将您的图书 class 更改为此

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

static constraints = {
     author nullable:true
}

另外,当您重新编译代码时,请务必删除之前的 table 并重新开始。 Grails 不会改变任何 table 来删除任何东西。它只会添加新内容。