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