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

Ste*_*Kuo 5 grails

我有两个域类 - 人有很多书.如果我创建一个Person,调用save(),然后创建+添加Books到Person,一切都持久化到数据库.如果我创建了一个Person,那么创建+添加Books,然后是save(),不会有任何持久性.

示例代码:

class Person {
   ...
   static hasMany = [books: Book]
}

class Book {
   ...
   static belongsTo = [person: Person]
}
Run Code Online (Sandbox Code Playgroud)

Works,保存到数据库:

def person = new Person(...).save()
def book = new Book(...)
person.addToBooks(book)
Run Code Online (Sandbox Code Playgroud)

不起作用,不保存到数据库:

def person = new Person(...)
def book = new Book(...)
person.addToBooks(book)
person.save()
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

我正在从Groovy控制台运行它.我试过打电话ctx.sessionFactory.currentSession.clear()哪个没用.

已解决:我附在人物上的书中有错误.通过电话person.hasErrors(),getErrors()我能够看到我的书未通过验证.这是从Grails控制台运行的,因此没有任何验证错误消息.

lee*_*tts 0

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

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

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