Можно ли использовать как аннотации, так и файлы hbm.xml в одном проекте в Hibernate? - PullRequest
10 голосов
/ 29 ноября 2011

Нужно ли делать строгий выбор между использованием аннотаций и конфигурационных файлов гибернации, или можно использовать оба способа одновременно в одном и том же проекте?

У нас большой проект, выполненный сHibernate 3.2.5 и POJO, сконфигурированные с файлами .hbm.xml.В проекте используется Hibernate SessionManager Factory и не основанный на JTA EntityManager factory.

Таким образом, сконфигурировано более сотни POJO, и первоначальная команда разработчиков неохотно переключается на аннотации.

Между тем нам нужно расширить проект дополнительными POJO, которые мы хотим настроить с помощью аннотаций Hibernate и хотим остаться с Hibernate - если это возможно - и не переключаться на JPA.

Возможно ли этоиспользовать комбинацию .hbm.xml конфигурационных файлов для одних POJO и аннотаций для других одновременно?

Ответы [ 3 ]

13 голосов
/ 29 ноября 2011

Да, вы можете. Документация говорит

Обратите внимание, что вы можете смешать старое использование hbm.xml и подход аннотации. Элементом ресурса может быть либо файл hbm, либо дескриптор развертывания EJB3 XML.

Есть несколько контрольных точек:

Однако вы не можете объявлять класс несколько раз (будь то аннотированный или через hbm.xml). Вы также не можете смешивать стратегии конфигурации (hbm против аннотаций) в иерархии объектов.

Вы можете найти дополнительную информацию здесь .

7 голосов
/ 02 декабря 2011

Ману дал ответ, но если вы собираетесь переключиться на аннотации и хотите конвертировать эти hbm.xml в аннотации.Пожалуйста, продолжайте.Вы можете использовать инструменты, которые будут генерировать классы pojo с аннотациями из существующих таблиц.Даже используя эти инструменты, вам не нужно менять другой код, просто генерируйте pojos, как раньше.т.е. не меняйте имена свойств.Я работал над тем же любопытным проектом и использовал для этого сценарий Ant.

0 голосов
/ 01 февраля 2018

Я думаю, что этот пост отличный, но с реальным примером кода это будет лучше. Я попробовал справку ManuPK и вот как это работает.
Мой действительный реф. Здесь: http://docs.jboss.org/hibernate/stable/annotations/reference/en/html/ch01.html#setup-configuration

//typical way to use cfg.xml
Configuration cfg = new Configuration();
SessionFactory f = cfg.configure("hibernate.cfg.xml").buildSessionFactory();
Session s = f.openSession();
s.persist(new EntityObj());

//to use both annotation & cfg.xml mappings, use AnnotationConfiguration instead of Configuration
AnnotationConfiguration cfg = new AnnotationConfiguration();
SessionFactory f = cfg.configure("hibernate.cfg.xml").buildSessionFactory();
Session s = f.openSession();
s.persist(new EntityObj());

AnnotationConfiguration будет читать файл cfg.xml как обычно, чтобы проанализировать и

Отказ от ответственности : я пытался использовать старую версию Hibernate версии 3.2.1, и она работает нормально.

...