Почему я должен объявлять каждый класс в моем hibernate.cfg.xml при использовании аннотаций? - PullRequest
7 голосов
/ 24 декабря 2009

Почему недостаточно установить аннотацию @Entity?

Я здесь упускаю суть (производительность?)?

Спасибо.

Ответы [ 4 ]

7 голосов
/ 24 декабря 2009

Аннотации недостаточно, потому что hibernate не знает, где живут ваши аннотированные классы, без какого-либо явного объявления. Теоретически он может сканировать каждый класс в пути к классам и искать аннотацию, но это будет очень дорого для крупных проектов.

Вы можете использовать spring, у которого есть помощник, который может позволить вам указать пакеты, в которых находятся ваши объекты гибернации, и он просто просканирует эти пакеты на наличие @Entity. Если у вас есть все ваши объекты в небольшом количестве фиксированных пакетов, это хорошо работает.

* 1005 Е.Г. *

  <bean id="referenceSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="packagesToScan">
      <array>
        <value>com.xxx.hibernate.objects</value>
      </array>
    </property>
  </bean>

Выше приведена декларация Spring. Если вы не знакомы с вышеуказанным синтаксисом, вы можете просто сконструировать его программно.

AnnotationSessionFactoryBean sfb = new AnnotationSessionFactoryBean();
sfb.setDataSource( ds );
sfb.setHibernateProperties( hibProps);
sfb.setPackagesToScan( ... );
sfb.initialise();
SessionFactory sf = sfb.getObject();

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

3 голосов
/ 24 декабря 2009

Нет, если для свойства hibernate.archive.autodetection установлено значение true. Здесь есть проблема с производительностью, так как Hibernate будет искать в jar-файлах аннотацию JPA. Обратите внимание, что он также инициализирует эти классы.

2 голосов
/ 24 декабря 2009

Да:)

Файл hibernate.cfg.xml не используется для указания ваших сущностей, он используется для настройки таких параметров, как параметры подключения hibernate и глобальные параметры. Файл hibernate.cfg.xml также содержит инструкции о том, как найти объекты. Вы можете перечислить файлы сопоставления XML, используя <mapping resource=XYZ>, но если вы используете аннотации JPA, такие как @Entity, то это не нужно, Hibernate автоматически их обнаружит.

Вы можете смешивать аннотации и отображать XML, если хотите, но в большинстве случаев это не обязательно.

1 голос
/ 24 декабря 2009

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

Справочные документы Hibernate EntityManager

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