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

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

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

Спасибо.

7
задан MisterY 24 December 2009 в 09:42
поделиться

4 ответа

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

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

Например

  <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>

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

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

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

.
7
ответ дан 6 December 2019 в 19:37
поделиться

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

.
3
ответ дан 6 December 2019 в 19:37
поделиться

Да :)

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

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

.
2
ответ дан 6 December 2019 в 19:37
поделиться

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

Hibernate EntityManager Reference Docs

1
ответ дан 6 December 2019 в 19:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: