使用Groovy Enum作为Grails中的Id字段

时间:2012-02-23 15:49:45

标签: hibernate grails gorm

我们在GORM中有一些遗留数据库映射,而且有几个有一个主键,它是一个枚举。枚举是使用字符串值而不是序数存储的。

例如:

class AccountingGLMap {
    AccountingTypeCode id
    String typeCode

    static mapping = {
        id(column: 'accountingTypeCode',  generator: 'assigned')
    }
}

当您尝试检索实例时,您会得到:

| Error 2012-02-23 10:32:41,319 [pool-5-thread-1] ERROR context.GrailsContextLoader  - Error executing bootstraps: could not deserialize; nested exception is org.hibernate.type.SerializationException: could not deserialize

我已经验证了表中的值正确映射到给定的枚举中(只要不是主键,我就可以用Enum实例化对象)。如果我们将Enum更改为String,一切正常。

我确实看到一篇文章声称在使用JPA时不能使用Enum作为主键,但即便如此也存在争议。

任何人都有这方面的经验吗?

编辑:作为参考,我们对Oracle数据库使用2.0.1。

1 个答案:

答案 0 :(得分:0)

type: 'string'添加到您的id映射中,然后添加一个id的setter,它接受一个String输入,如下所示:

class AccountingGLMap {
    AccountingTypeCode id
    GLTypeCode glTypeCode

    static mapping = {
        id(column: 'accountingTypeCode', type: 'string', generator: 'assigned')
    }

    void setId(String value) {
        id = value
    }
}