Hibernates создает столбец VARBINARY с аннотацией JPA @Enumerated - PullRequest
2 голосов
/ 11 апреля 2010

Hibernates создает столбец VARBINARY с аннотацией JPA @Enumerated. Я использую SQL Server 2005 с драйвером JTDS. Отображение очень просто:

@Basic
@Enumerated(EnumType.ORDINAL)
private MyEnum foo;

Я бы ожидал, что Hibernate сгенерирует целочисленный столбец? Я также пробовал EnumType.STRING (ожидание столбца varchar), но безуспешно.

Обратите внимание, что мое приложение работает нормально; тип столбца затрудняет проверку БД и выдачу специального SQL при поиске в базе данных.

Ответы [ 3 ]

1 голос
/ 11 июня 2010

Это была глупая ошибка пользователя. Вопреки тому, что я написал в своем вопросе, я испортил «простое» отображение. Вместо того, чтобы объявлять мою переменную-член MyEnum, у меня было это:

@Basic
@Enumerated(EnumType.ORDINAL)
private Enum foo;

Ну, конечно, Hibernate должен был хранить двоичные данные, так как я сказал, что хочу хранить произвольные значения перечисления. Смена типа foo на MyEnum «исправила» проблему.

1 голос
/ 11 апреля 2010

Возможно, это проблема, специфичная для SQL Server (возможно, вы могли бы взглянуть на источники диалекта SQL Server в Hibernate, чтобы узнать используемый тип данных).

В общем случае, вероятно, не рекомендуется использовать отображение EnumType.ORDINAL, по той же причине не рекомендуется использовать порядковые номера перечисления в простом коде Java: добавление или удаление значений перечисления может легко нарушить ваш код , так как это может изменить порядковый номер существующего значения перечисления. Это обсуждается более подробно в Effective Java, 2nd Ed Chapter 6, Item 31.

Я также нашел дополнительные аргументы для этого с точки зрения БД .

0 голосов
/ 12 апреля 2010

Я не смог воспроизвести проблему с версией Hibernate, которую я использую, но я предполагаю, что Hibernate не распознает ваше свойство enum как свойство @Enumerated (MyEnum - это enum, верно ?) и относиться к нему как к Serializable. Я знаю, что спецификация JPA говорит, что можно использовать @Basic с перечислениями, но вы пытаетесь без?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...