удалить из каскада все-удалить-сирота не работает - PullRequest
0 голосов
/ 17 апреля 2011

Grails 1.3.7 с MySQL 5.5

Либо я должен что-то делать с умом, либо это связано с проблемами Грааля http://jira.grails.org/browse/GRAILS-5804 и http://jira.grails.org/browse/GRAILS-4121 и аналогичными.У меня есть:

class Author {
    String name
    static hasMany = [books: Book]
    static constraints = {
        books cascade: 'all-delete-orphan'
    }
    String toString() {
        return name
    }
}

class Book {
    String title
    static belongsTo = [author: Author]
    static constraints = {
    }
    String toString() {
        return title
    }
}

Bootstrap:
def a = new Author(name: 'Author0')
a.save(flush: true, failOnError: true)      
def b = new Book(title: 'Book0')
a.addToBooks(b).save(flush: true, failOnError: true)

class AuthorController {
    def index = {
        println("Controller code: " + "Old books by author: " + Author.get(1).books)
        def author = Author.findByName("Author0")
        def oldBooks = []
        oldBooks += author.books  // to avoid ConcurrentModificationException
        oldBooks.each {
            author.removeFromBooks(it)
        }
        author.save(flush: true, failOnError: true)
        println("Controller code: " + "New books by author: " + Author.get(1).books)
            render("All done!")
        }
    }

Но когда я перехожу на localhost: 8080 / foo / author / index, я получаю 'свойство not-null, ссылающееся на нулевое или временное значение: foo.Book.author' во время сохранения()

Я на самом деле не знаю GORM-внутренностей или Hibernate (прокси против незафиксированных экземпляров), я пробовал все комбинации, используя 'get' вместо 'find', но не могу заставить это работать.Может кто-нибудь объяснить, как это должно работать?

1 Ответ

2 голосов
/ 17 апреля 2011

Я думаю, что вы не наложили ограничение, оно должно быть таким:

static mapping = {
    books cascade: "all-delete-orphan"
}

НЕ

static constraints = {
    books cascade: 'all-delete-orphan'
}

Это вызывает проблему. Более подробную информацию об этом GORM можно найти здесь (Удаление детей).

...