2012-05-15 2 views
0

В проекте я использую JPA с внедрением Hibernate. Все сущности основаны на аннотации и перечислены в файле persistence.xml.JPA Hibernate Typedef

Все объекты упакованы в банку.

Мне нужно определить typedef для нескольких свойств (во всех сущностях), которые являются строкой для типа перечисления. В DB столбцы - varchar. Как я могу достичь этого?

Могу ли я достичь этого, добавив hbm.xml и hibernate-cfg.xml?

Заранее спасибо.

ответ

3

Прямо из the documentation:

@ org.hibernate.annotations.TypeDef и @ org.hibernate.annotations.TypeDefs позволяет объявлять Типу определения. Эти аннотации могут быть размещены на уровне класса или пакета . Обратите внимание, что эти определения являются глобальными для фабрики сеансов (даже если они определены на уровне класса). Если тип используется в одном объекте , вы можете поместить определение на самом объекте. В противном случае рекомендуется установить определение на уровне .

+0

У меня есть ограничение .. Я не могу редактировать классы и переупаковывать их в банку. Вот почему я упомянул сначала, что они упакованы. – user1300877

+0

Никто не сказал, какой пакет или какой класс. И фрагмент документации не подходит, чтобы указать, что независимо от того, какой пакет или класс они привязаны, typedef является глобальным. –

0

Если вы не можете изменить классы, но могут изменить спящий режим конфигурации, я думаю, вы могли бы изменить hibernate.mapping.precedence быть «НВМ, класс», а затем добавить HBM файлы со всей информацией в аннотации для соответствующих классов. Существует синтаксис hbm для указания типа UserType или EnumType. Вы также должны определить свой класс UserType, если используете это.

Возможно, вы захотите попробовать это в тестовом проекте, прежде чем принять мое слово, я предполагаю, что это сработает, но я не знаю точно.

Копирование всей информации о сохранении из аннотаций в hbm может быть болью и будет дублировать информацию. Попробуйте, если возможно, найти способ добавления аннотаций к самим классам.