Можно ли использовать как аннотации, так и файлы 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, и он работает нормально.