如果在添加关系后调用 Grails save() 不会保存
Posted
技术标签:
【中文标题】如果在添加关系后调用 Grails save() 不会保存【英文标题】:Grails save() doesn't save if called after relationship is added 【发布时间】:2009-09-30 08:41:12 【问题描述】:我有两个域类 - Person 有很多书。如果我创建一个 Person,调用 save(),然后创建 + 添加 Books 到 Person,一切 被持久化到数据库中。如果我创建一个人,然后创建+添加 书籍,然后是 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 控制台运行的,因此没有任何验证错误消息。
【问题讨论】:
【参考方案1】:您需要像这样手动刷新休眠会话:
person.save(flush:true)
【讨论】:
【参考方案2】:我不确定,但我认为这是因为 save() 设置了 Person 的 ID,它需要能够将一本书添加到它的图书集合中。
我建议对 Hibernate 收集行为进行一些谷歌搜索,这可能是 Hibernate 的工作方式,也可能是您正在使用的 Grails 版本中的错误。
要尝试的另一件事是使用 person.save(flush:true) 强制刷新
【讨论】:
以上是关于如果在添加关系后调用 Grails save() 不会保存的主要内容,如果未能解决你的问题,请参考以下文章