Спецификация JPA не говорит, что это возможно:
2.1.4 Первичные ключи и идентификация объекта
Первичный ключ (или поле или свойство составного первичного ключа)) должен быть одного из следующих типов: любой тип примитива Java;любой примитивный тип обертки;java.lang.String;java.util.Date;java.sql.Date.В целом, однако, приблизительные числовые типы (например, типы с плавающей запятой) никогда не должны использоваться в первичных ключах.Объекты, чьи первичные ключи используют типы, отличные от этих, не будут переносимыми.
Если вы действительно хотите иметь фиксированное количество записей во время компиляции для данного объекта, вы можете использовать String
илиint
первичный ключ и присвоение ему AssetType.FOO.name()
или AssetType.FOO.ordinal()
И непереносимый здесь означает, что некоторый поставщик сохраняемости может поддерживать другие функции, но он может не работать для другого поставщика.Как и в enum - если поставщик персистентности имеет специальную поддержку для него, он не пытается создать его экземпляр, а обрабатывает его специально после проверки, если class.isEnum()
, тогда он может работать.Но, похоже, ваш поставщик персистентности этого не делает.