我们在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。
答案 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
}
}