Как сделать первый столбец обнуляемым в таблице соединений один ко многим? - PullRequest
0 голосов
/ 02 октября 2018

Кажется, что изменение в поведении от Грааля 2 до Грааля3.Когда я создаю отношения один ко многим, например

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 первый столбец не должен быть нулевым.Кроме того, таблица соединения доступна только для чтения, поэтому я не могу удалить строки, будут нулевые значения первого столбца.Есть ли способ сделать первый столбец nullable = true, внося изменения в домены, а не непосредственно в файл миграции.

Код был извлечен из документации Grails.Пожалуйста, прокрутите вниз до раздела один ко многим.

6.2.1.2 Один ко многим

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

1 Ответ

0 голосов
/ 02 октября 2018

Попробуйте изменить класс Book на этот

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

static constraints = {
     author nullable:true
}

Также при перекомпиляции кода обязательно удалите предыдущую таблицу и начните заново.Grails не будет изменять таблицу для удаления чего-либо.Это только добавляет новые вещи.

...