使用 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()