在grails中禁用本机生成的标识值功能

在grails中禁用本机生成的标识值功能,grails,identifier,generated,heidisql,Grails,Identifier,Generated,Heidisql,以下是我的域类详细信息 class Age { String agetype static constraints = { } } 我正在使用HeidiSQL。我想删除自动生成的id列。并将主键设置为“agetype”。我能做什么 如果不需要默认的id,则可以在映射块内轻松自定义标识符 class Age { String agetype static mapping = { id name: 'agetype',

以下是我的域类详细信息

class Age {
    String agetype
    static constraints = {
    }

}

我正在使用HeidiSQL。我想删除自动生成的id列。并将主键设置为“agetype”。我能做什么

如果不需要默认的
id
,则可以在映射块内轻松自定义标识符

class Age {
    String agetype

    static mapping = {
        id name: 'agetype', 
           column: 'AGE_TYPE', // if the column name is AGE_TYPE
           generator: 'assigned' // Unique String should assigned for agetype
    }

    static constraints = {
        agetype bindable: true //identifiers are not bindable by default
    }
}
通过上述设置,您应该能够将年龄创建为:

new Age(agetype: 'Teen').save(flush: true)
如果再次运行,上述操作将导致主键冲突


如需有关自定义
id
和的更多详细信息,请参阅。

。可以从字段的类型推断类型。在您的情况下,我建议添加列名,因为名称不是camelCased(ageType),如果实际列名是
AGE\u TYPE
,则它不会自动推断。它不起作用。id列仍然存在,它是主键。我想删除id字段,并将agetype作为主键。不重命名id字段。请确保在上述修改后重新启动应用程序后重新创建表。检查相关环境中的
DataSource.groovy
是否有
dbCreate=“create-drop”
。@Sag在这种情况下,它必须更改为“create-drop”,然后重新启动应用程序,以便删除旧表并创建一个以agetype作为主键的新表。我的错误。我的答案有一个拼写错误(更正了)。应该是
mapping
而不是
mappings
作为
静态映射={..}
。应用程序重启后,现在应该可以工作了。
class Age {
    String agetype

    static mapping = {
        id name: 'agetype', 
           column: 'AGE_TYPE', // if the column name is AGE_TYPE
           generator: 'assigned' // Unique String should assigned for agetype
    }

    static constraints = {
        agetype bindable: true //identifiers are not bindable by default
    }
}