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

Grails save()不';如果在添加关系后调用,则不会保存,grails,Grails,我有两个域类-Person有很多书。如果我创建一个 Person,调用save(),然后创建并向Person添加书籍,包括所有内容 保存到数据库中。如果我创建了一个人,那么创建+添加 Books,后跟save(),不会保留任何内容 示例代码: class Person { ... static hasMany = [books: Book] } class Book { ... static belongsTo = [person: Person] } 工作,保存到数

我有两个域类-Person有很多书。如果我创建一个 Person,调用save(),然后创建并向Person添加书籍,包括所有内容 保存到数据库中。如果我创建了一个人,那么创建+添加 Books,后跟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()
不工作,不保存到数据库:

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控制台运行的,因此没有任何验证错误消息。

我不确定,但我认为这是因为save()设置了能够向其图书收藏中添加图书所需的人员ID

我建议在谷歌上搜索一下Hibernate的收集行为,这可能是Hibernate的工作方式,也可能是您正在使用的Grails版本中的一个bug


另一种尝试是强制刷新person.save(刷新:true)

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

person.save(flush:true)