Grails 2.3.11-对象无法持久

时间:2018-08-07 17:30:53

标签: hibernate grails gorm

我正在尝试使用Grails 2.3.11修改服务中的某些实体。我已经简化为以下代码:

void updateCompanyType(CompanyType type, Map properties) {
    def role = properties.role?.id ==~ /\d+/ ? Role.get(properties.role.id) : null

    role.name = "Super New Name"
    role.save(failOnError: true, flush: true)

    if (type.role != role) {
        type.role = role
    }

    type.name = properties.name
    type.save(failOnError: true)
}

类型成功更新,但角色未更新。对为什么有任何见解?我知道在服务调用中,我正在进行事务处理,因此无论是否有显式保存调用,我都尝试过此操作,这似乎没有任何作用。

部分查看Role类:

class Role implements Comparable {

  Integer id
  String name
  String code
  RoleType roleType

3 个答案:

答案 0 :(得分:0)

尝试更改

def role = properties.role?.id ==~ /\d+/ ? Role.get(properties.role.id) : null

进入

def role = properties.role?.id ==~ /\d+/ ? Role.get(properties.role.id) : new Role()

答案 1 :(得分:0)

如果您正在使用Spring Security Role对象,是否已对其进行扩展以在该对象上添加“名称”?如果是这样,您是否在扩展对象中将其定义为“ def name”或“ String name”?

无论哪种方式,如果您在域类中将属性声明为“ def”或“ private”,即使您在调试器中查看它,它也不会将其持久化到数据库中,即使该属性具有值。另外,如果您使用内置的数据库模式生成器utils和迁移,它实际上是在“角色”表中创建了“名称”列,还是您手动进行了此操作?

是否需要查看您的“ Role”角色的域名类?

答案 2 :(得分:0)

我终于通过设置

使它起作用
  

版本为真

在“映射”部分的“我的角色域”对象上。