【发布时间】:2011-06-24 06:04:24
【问题描述】:
我正在使用 Grails 1.3.6,但在保存以正确级联时遇到问题。问题特别在于具有两个父类的类。我正在尝试的简化版本是这样的:
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 实例会在 Publisher 实例之前保存,从而导致错误“not-null property references a null or transient value: adhoc.Book.publisher”。
我尝试了各种不同的方法来定义关系,但收效甚微。我已经尝试过临时保存,这确实有效,但我可以看到父表在我保存子数据时更新 - 即位置、作者和发布者都更新到版本 1。(而且我想保留代码尽可能简单。)我想避免链接表。
任何建议都非常感谢!
【问题讨论】:
标签: grails grails-orm