Удалить ассоциацию в одном или нескольких граалях - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть две сущности в проекте Grails

class Author {
    String name

    static hasMany = [books: Book]
}

class Book {
    String title
    int year
    String isbn
}

Когда я удаляю книгу, мне нужно удалить ссылку на автора и связанную таблицу

Но когда я делаю Book.delete (id), я был этой трассировкой стека

{"errors":"Hibernate operation: could not execute statement; SQL [n/a]; Cannot delete or update a parent row: a foreign key constraint fails

Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Если вы хотите просто иметь возможность удалить Книгу (а не удалить автора и все связанные с ней книги), вам нужно сделать что-то вроде:

Измените свой класс Книги, чтобы иметь ссылкуавтору:

class Book {
    String title
    int year
    String isbn

    Author author
    static belongsTo = Author
}

Затем удалите книгу у автора перед удалением:

Book b = ? // get your book however you want here
def author = b.author
author.removeFromBooks(b)
b.delete()
0 голосов
/ 25 апреля 2018

Добавьте belongsTo к книге, чтобы сообщить GORM каскадное удаление http://docs.grails.org/3.3.x/ref/Domain%20Classes/belongsTo.html

Или используйте ORM dsl для дополнительных опций http://gorm.grails.org/6.1.x/hibernate/manual/index.html в разделе 8.2.9. Custom Cascade Behaviour

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...