#hibernate #grails #grails-orm
#переход в спящий режим #grails #grails-orm
Вопрос:
Grails 1.3.7 с MySQL 5.5
Либо я, должно быть, делаю что-то безмозглое, либо это связано с проблемами Grailshttp://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-internals или Hibernate (прокси- или непроксируемые экземпляры), я перепробовал все комбинации использования ‘get’ вместо ‘find’, но не могу заставить это работать. Кто-нибудь может объяснить, как это должно работать?
Ответ №1:
Я думаю, вы неправильно установили ограничение, оно должно быть таким:
static mapping = {
books cascade: "all-delete-orphan"
}
НЕ
static constraints = {
books cascade: 'all-delete-orphan'
}
Это вызывает проблему. Более подробную информацию об этих ошибках GORM можно найти здесь (Удаление дочерних элементов).
Комментарии:
1. Хм, я пробовал переключать кавычки, но это не помогло. Также пробовал переключаться на hsqldb, это тоже ничего не дало…
2. @John: на самом деле, это не цитата. Пожалуйста, обратите внимание на «статическое сопоставление = » и «статическое ограничение = …»
3. Ого! Вы, конечно, правы. Определенно в категории «мертвые мозги». Интересно, могу ли я закрыть / удалить этот вопрос из Stackoverflow — ничего не добавляет сообществу.
4. @John: Приятно слышать, что вы решаете проблему, в следующий раз я буду более конкретным. Вам не нужно беспокоиться об этом вопросе, все мы иногда совершаем ошибки.