Можно ли использовать как аннотации, так и файлы hbm.xml в одном проекте в Hibernate?

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

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

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

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

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

Ответ 1

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

Ответ 2

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

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

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

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

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

Ответ 3

Я думаю, что этот пост замечательный, но с реальным примером кода это будет лучше. Я пробовал ManuPK ref и это как это работает.
Мой фактический ref здесь: 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, как обычно, для анализа как < mapping resource = "your_entity.hbm.xml" / > и < mapping class= "my.entity.objclass" / >

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