我有两个域类 - 人有很多书。如果我创建一个 人,调用save(),然后创建+将书添加到Person,一切 被持久化到数据库。如果我创建了一个Person,那么创建+ add 书籍,然后是save(),没有任何内容可以保留。
示例代码:
class Person {
...
static hasMany = [books: Book]
}
class Book {
...
static belongsTo = [person: Person]
}
工作,保存到数据库:
def person = new Person(...).save()
def book = new Book(...)
person.addToBooks(book)
不起作用,不保存到数据库:
def person = new Person(...)
def book = new Book(...)
person.addToBooks(book)
person.save()
为什么会这样?
我正在从Groovy控制台运行它。我试过打电话给ctx.sessionFactory.currentSession.clear()
这没有帮助。
已解决:我附加到此人的图书中有错误。通过调用person.hasErrors()
和getErrors()
,我能够看到我的图书未通过验证。这是从Grails控制台运行的,因此没有任何验证错误消息。
答案 0 :(得分:2)
您需要手动刷新hibernate会话,如下所示:
person.save(flush:true)
答案 1 :(得分:0)
我不确定,但我认为这是因为save()设置了人员的ID,这些人员需要能够将书籍添加到书籍集合中。
我建议在Hibernate集合行为上进行一些谷歌搜索,它可能是Hibernate的工作方式,也可能是你正在使用的Grails版本中的一个错误。
另一件事是尝试使用person.save(flush:true)强制刷新