如果在添加关系后调用,则Grails save()不会保存

时间:2009-09-30 08:41:13

标签: grails

我有两个域类 - 人有很多书。如果我创建一个 人,调用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控制台运行的,因此没有任何验证错误消息。

2 个答案:

答案 0 :(得分:2)

您需要手动刷新hibernate会话,如下所示:

person.save(flush:true)

答案 1 :(得分:0)

我不确定,但我认为这是因为save()设置了人员的ID,这些人员需要能够将书籍添加到书籍集合中。

我建议在Hibernate集合行为上进行一些谷歌搜索,它可能是Hibernate的工作方式,也可能是你正在使用的Grails版本中的一个错误。

另一件事是尝试使用person.save(flush:true)强制刷新

相关问题