我有两个域类 - 人有很多书.如果我创建一个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控制台运行的,因此没有任何验证错误消息.
我不确定,但我认为这是因为 save() 设置了能够将书籍添加到其书籍集合中所需的人员的 ID。
我建议对 Hibernate 集合行为进行一些谷歌搜索,这可能是 Hibernate 的工作方式,也可能是您正在使用的 Grails 版本中的错误。
另一件要尝试的事情是用 person.save(flush:true) 强制刷新