У нас есть некоторые устаревшие отображения базы данных в 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, все будет работать нормально.
Я видел статью, в которой утверждается, что вы не можете использовать Enum в качестве первичного ключа при использовании JPA, но даже это оспаривается.
У кого-нибудь есть опыт в этом деле?
РЕДАКТИРОВАТЬ: Для справки мы используем 2.0.1 против базы данных Oracle.