Как сканировать пакеты на наличие сущностей Hibernate вместо использования hbm.xml?

В настоящее время я сканирую пакеты на наличие DAO и сервисов, используя Spring 3.1 и Hibernate 4 через <context:component-scan>. Есть ли способ сделать то же самое для классов, отмеченных @Entity, вместо использования свойства configLocation и файла hbm.xml?

<hibernate-configuration>
    <session-factory>
        <mapping class="com.example.model.User" />
            <!-- etc. -->
    </session-factory>
</hibernate-configuration>

person blank    schedule 29.06.2012    source источник


Ответы (4)


<bean id="sessionFactory"
  class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
  p:dataSource-ref="dataSource"
  p:configLocation="WEB-INF/classes/hibernate.cfg.xml"
  p:packagesToScan="com.example.model"
/>

Сканирует все в пакете модели. Я использую свой файл cfg.xml для хранения таких настроек, как show_sql и hb2ddl.auto.

person NimChimpsky    schedule 29.06.2012
comment
Могу ли я использовать этот метод в сочетании с liquibase (командная строка)? - person vbence; 26.03.2014
comment
@NimChimpsky под всем, что вы имеете в виду, он также будет сканировать все подпакеты пакета модели? - person Badr; 27.01.2015
comment
В какой/где файл я могу поместить этот XML. В настоящее время у меня нет beans.xml pr ничего подобного? Извините, очень новичок в этом. - person Sodved; 16.05.2016

Вы можете сделать что-то подобное в файле application context.xml для сканирования всех классов аннотаций:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="lobHandler" ref="lobHandler"/>
<property name="packagesToScan">
    <list>
        <value>com.idc.scd.domain</value>
        <value>com.idc.scd.domain.dropdown</value>
        <value>com.idc.scd.domain.external</value>
        <value>com.idc.scd.domain.pk</value>
    </list>
</property>
    <property name="hibernateProperties">
      <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
            <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
        <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
        <prop key="hibernate.use_sql_comments">${hibernate.use_sql_comments}</prop>
        <prop key="hbm2ddl.auto">validate</prop>
        <prop key="hibernate.cache.use_query_cache">true</prop>
        <prop key="hibernate.connection.release_mode">after_statement</prop>
        <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</prop>
        <prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop>
        <prop key="hibernate.cache.use_structured_entries">${hibernate.cache.use_structured_entries}</prop>
        <prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size}</prop>
        </props>
    </property>
</bean>
person Pramod Kumar    schedule 29.06.2012

Вы можете использовать свойство Spring mapppingLocations, чтобы указать место, где Spring будет искать файлы сопоставления спящего режима.

<property name="mappingLocations" value="classpath:com/example/model/hibernate/*.hbm.xml"/>

Надеюсь это поможет.

person Balkrishan Nagpal    schedule 29.06.2012
comment
Вопрос говорит вместо hbm.xml. - person vbence; 26.03.2014

Упрощая, вы можете использовать следующий код в файле конфигурации «spring-servlet.xml»:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation">
            <value>classpath:hibernate.cfg.xml</value>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${jdbc.dialect}</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
        <property name="packagesToScan" value="com.your.bean.package" />
    </bean>

Примечание:

  • класс AnnotationSessionFactoryBean требуется в "sessionFactory"
  • свойство "packagesToScan" с аннотированным пакетом классов (или список пакетов - см. пример Кумара, чтобы сделать это-)
person Ariel Carrera    schedule 18.06.2013
comment
Он использует hibernate 4. org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean неверен - person Floegipoky; 09.07.2013