2012-06-29 5 views
20

私は現在、Spring 3.1を使用してDAOとサービスのパッケージをスキャンしています <context:component-scan>によってHibernate 4 configLocationプロパティとhbm.xmlファイルを使用するのではなく、@Entityとマークされたクラスに対して同じ方法を実行できますか?hbm.xmlを使用する代わりにHibernateエンティティのパッケージをスキャンする方法は?

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

答えて

35
<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のような設定を含んでいます。

+0

私は* LiquiBaseをする*(コマンドライン)と一緒にこの方法を使用することはできますか? – vbence

+2

@NimChimpskyあなたがモデルパッケージのすべてのサブパッケージも同様にスキャンすることを意味しますか? – Badr

+1

このXMLはどこに置くのですか。私は現在beans.xmlを持っていません。申し訳ありませんが、これは非常に新しいです。 – Sodved

3

SpringのmappingLocationsプロパティを使用して、springがhibernateマッピングファイルを探す場所を指定することができます。

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

希望します。 :設定ファイル「春-servlet.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> 
+0

ありがとうございました。あなたは私をたくさん助けました。 – holzleube

+5

質問に「hbm.xmlの代わりに」と書かれています。 – vbence

18

<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」(またはパッケージのリストがthis-を行うにはクマーの一例を-see)
3

簡素化、 - あなたはすべてのアノテーションクラスをスキャンするアプリケーションのcontext.xmlファイルにこのようないくつかの操作を行うことができ

+2

彼は休止状態4を使用しています。org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBeanが間違っています – Floegipoky

関連する問題