grails - GORM继承

标签 grails 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()

关于grails - GORM继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29399578/

相关文章:

oracle - Grails 和 Oracle 出现“列表中表达式的最大数量为 1000”错误

jquery - 用于Grails中javascript的GSP片段替代

grails - GORM或HSQL专用于左联接

grails - 如何使用RestFul API在Grails中直接调用GSP

grails - 成功调用服务后,Grails无法提交

grails - 命名查询日期(月和年)

ruby-on-rails - 陷入困境-db:create和db:migrate发生了什么?

oracle - 使用gorm grails中的虚拟列保存实体

grails - Grails/Gorm:继承和外键

grails - 如何防止双向关联的级联删除?