使用 GORM 继承
Inheritance with GORM
我有几个域 类 是这样设置的:
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()
。
我有几个域 类 是这样设置的:
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()
。