我有一些这样设置的域类:
Person
- Name
OrganizationPerson extends Person
- Role
- Organization
User
- Person
在Bootstrap.groovy中,我正在创建一个示例用户:
def person = OrganizationPeople.findOrSaveWhere(name:'admin', emailAddress: 'steven@admin.com')
person.save(flush:true)
def user = User.findOrSaveWhere(person: person, organization: organization,
username: 'admin', password: 'asdfasdf')
但是,当代码最终到达
User.findOrSaveWhere
时,我得到一个错误:Error initializing the application: object references an unsaved
transient instance - save the transient instance before flushing:
com.eventrosity.Person; nested exception
但是,在
OrganizationPerson
继承Person
之前,这不是问题。 person.save(flush:true)
保存了该项目。这是GORM中的问题吗?在域对象和继承的上下文中是否需要注意这个问题?
最佳答案
这可能只是一个标准的验证问题-OrganizationPeople
实例保存失败,因此您无法继续保存User
。当您调用save()
(或类似findOrSaveWhere
的代码为您调用)时,不会出现明显的错误或异常。但是很容易检查保存是否成功:
def person = OrganizationPeople.findOrSaveWhere(...)
if (person.hasErrors()) {
// handle the error
}
else {
def user = User.findOrSaveWhere(...)
if (user.hasErrors()) {
// handle the error
}
}
请注意,显式
person.save()
调用是多余的,因为findOrSaveWhere
已经为您调用了save()
。
关于grails - GORM继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29399578/