22

<context:component-scan>我目前使用 Spring 3.1 和 Hibernate 4 通过是否有办法对标记的类@Entity而不是使用configLocation属性和文件执行相同的操作来扫描包中的 DAO 和服务hbm.xml

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

4 回答 4

37
<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 等设置。

于 2012-06-29T07:23:40.807 回答
19

您可以在 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>
于 2012-06-29T07:27:43.320 回答
4

您可以使用 Spring 的 mappingLocations 属性来指定 spring 将查找休眠映射文件的位置。

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

希望这可以帮助。

于 2012-06-29T07:24:59.680 回答
3

简化,您可以在配置文件“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>

笔记:

  • “sessionFactory”中需要类 AnnotationSessionFactoryBean
  • 带有带注释的类包的属性“packagesToScan”(或包列表 - 请参阅 Kumar 的示例来执行此操作)
于 2013-06-18T14:58:57.987 回答