2012-06-29 9 views
20

Attualmente scansione pacchetti per DAO e servizi utilizzando Primavera 3.1 & Hibernate 4 tramite <context:component-scan> C'è un modo per fare la stessa cosa per le classi contrassegnati @Entity invece di utilizzare la proprietà configLocation e un file hbm.xml?Come scansionare i pacchetti per le entità di Hibernate invece di usare hbm.xml?

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

risposta

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

esplorerà tutto in pacchetto modello. Io uso il mio cfg.xml per contenere impostazioni come show_sql e hb2ddl.auto.

+0

Posso usare questo metodo in combinazione con * liquibase * (riga di comando)? – vbence

+2

@NimChimpsky per tutto quello che intendi, eseguirà la scansione di tutti i sottoprocessi del pacchetto del modello? – Badr

+1

Quale/Dove file metto questo XML in. Al momento non ho un pr beans.xml qualcosa del genere? Scusa, molto nuovo a questo. – Sodved

3

È possibile utilizzare la proprietà mappingLocations di Spring per specificare una posizione in cui la molla cercherà i file di mapping in ibernazione.

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

Spero che questo aiuti.

+0

grazie mille per questo. Mi hai aiutato molto. – holzleube

+5

La domanda dice "invece di hbm.xml". – vbence

18

Si può fare un po 'come questo in file dell'applicazione context.xml per la scansione di tutte le classi di annotazione -

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

Semplificando, si potrebbe usare il codice come il seguente nel file di configurazione 'primavera-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> 

Nota:

  • classe AnnotationSessionFactoryBean è richiesto in "sessionFactory"
  • proprietà "packagesToScan" con il pacchetto classi annotato (o una lista di pacchetti -vedi esempio di Kumar fare questo-)
+2

Sta usando hibernate 4. org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean non è corretto – Floegipoky

Problemi correlati