Я использую Grails 1.3.6, и у меня возникают проблемы с сохранением каскада. Проблема конкретно связана с классами, которые имеют два родительских класса. Упрощенная версия того, что я пытаюсь это:Grails/GORM сохраняет неправильный код
class Location {
String city
static hasMany = [authors: Author, publishers: Publisher]
}
class Author {
String name
static belongsTo = [location: Location]
static hasMany = [books: Book]
}
class Publisher {
String name
static belongsTo = [location: Location]
static hasMany = [books: Book]
}
class Book {
String title
static belongsTo = [author: Author, publisher: Publisher]
}
class Srv1Service {
static transactional = true
def loadData() {
def l1 = new Location(city: "London")
def a1 = new Author(name: "Graham Greene")
l1.addToAuthors(a1)
def p1 = new Publisher(name: "Some Press")
l1.addToPublishers(p1)
def b1 = new Book(title: "The Comedians")
a1.addToBooks(b1)
p1.addToBooks(b1)
l1.save()
}
}
Если я бег выше LoadData, экземпляр книги сохраняется до экземпляра Publisher, в результате ошибки «не-нулевое свойство ссылается на нулевое или переходное значении : adhoc.Book.publisher ".
Я пробовал различные способы определения отношений с небольшим успехом. Я пробовал временные сбережения, и это работает, но я вижу, что родительские таблицы обновляются, когда я сохраняю дочерние данные - то есть местоположение, автор и издатель все обновляется до версии 1. (И также я хотел бы сохранить код насколько я могу.) Я хотел бы избежать связывания таблиц.
Любые советы с благодарностью получены!