Grails 1.3.6を使用していますが、正しくカスケードするための保存に問題があります。この問題は、具体的には2つの親クラスを持つクラスで発生します。私がしようとしています何の簡易版はこれです: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の上で実行した場合、Bookインスタンスが「非NULLプロパティがnullまたは一時値を参照するエラーが生じ、パブリッシャーのインスタンスの前に保存されます:adhoc.Book.publisher "
私はほとんど成功していない関係を定義するさまざまな方法を試しました。私は中間保存を試みましたが、これはうまくいきますが、子データを保存するときに親テーブルが更新されていることがわかります。つまり、Location、Author、およびPublisherはすべてバージョン1に更新されます。私はできるだけシンプルです)テーブルをリンクしないようにしたいと思います。
アドバイスをいただきありがとうございます。