2009-10-31 7 views
9

nel mio applicationContext.xml, questo è il modo in cui mappo xml a POJO. come mappare la directory in un file di classe senza la necessità di creare xml?spring + hibernate mapping class senza xml

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
<property name="mappingResources"> 
      <list> 
       <value>com/custompackage/custom/spi/hibernate3/HibernateCurrentStep.hbm.xml</value> 
       <value>com/custompackage/custom/spi/hibernate3/HibernateHistoryStep.hbm.xml</value> 
       <value>com/custompackage/custom/spi/hibernate3/HibernatecustomEntry.hbm.xml</value> 
        <value>user/custom/hibernate3/PropertySetItemImpl.hbm.xml</value> 
        <value>com/custompackage/user/provider/hibernate3/user/impl/HibernateGroupImpl.hbm.xml</value> 
        <value>com/custompackage/user/provider/hibernate3/user/impl/HibernateUserImpl.hbm.xml</value> 
      </list> 
     </property> 


     <property name="hibernateProperties"> 
      ..... 
     </property> 
     <property name="dataSource"> 
      <ref bean="dataSource" /> 
     </property> 

    </bean> 

risposta

23

E si può semplificare ulteriormente le cose convertendo

<property name="annotatedClasses"> 
    <list> 
     <value>com.mycompany.sample.domain.Order</value> 
     <value>com.mycompany.sample.domain.LineItem</value> 
     ... 
    </list> 
</property> 

a

<property name="packagesToScan" value="com.mycompany.sample.domain" /> 

nella tua AnnotationSessionFactoryBean così ora tutte le classi annotate con @Entity nel pacchetto com.mycompany.sample.domain sarà scelto automaticamente.

+0

Cosa devo convertire nella mappatura delle classi in AnnotationSessionFactoryBean? –

+0

@JiayiZhou Puoi elaborare, non ho proprio capito cosa stai chiedendo. –

+0

Se in una delle mie Entità, aggiungo una proprietà che OneToOne effettua il mapping su un'altra entità. Cosa devo aggiungere nella configurazione xml del framework di primavera per farlo funzionare? Puoi controllare i dettagli della mia domanda qui: http://stackoverflow.com/questions/40956208/how-to-configure-hibernate-onetoone-mapping-using-spring-framework –

17

Invece di usare file di mapping XML, è possibile utilizzare la libreria Hibernate Annotations che si basa su Java 5 annotazioni.

Come al solito, è necessario dichiarare le classi di persistenza nel file di configurazione di Hibernate (tipicamente hibernate.cfg.xml), anche se si utilizza l'elemento <mapping> per dichiarare le classi persistenti:

<hibernate-configuration> 
     <session-factory> 
     <mapping class="com.mycompany.sample.domain.Order"/> 
     <mapping class="com.mycompany.sample.domain.LineItem"/> 
     </session-factory> 
    </hibernate-configuration> 

Se stai usando il framework Spring, puoi configurare una sessione di Hibernate basata su annotazione utilizzando la classe AnnotationSessionFactoryBean, come mostrato qui:

<!-- Hibernate session factory --> 
    <bean id="sessionFactory" 
     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource"> 
    <ref bean="dataSource"/> 
    </property> 
    <property name="hibernateProperties"> 
    <props> 
     <prop key="hibernate.dialect">org.hibernate.dialect.DerbyDialect</prop> 
     <prop key="hibernate.hbm2ddl.auto">create</prop> 
     ... 
    </props> 
    </property> 
    <property name="annotatedClasses"> 
    <list> 
     <value>com.mycompany.sample.domain.Order</value> 
     <value>com.mycompany.sample.domain.LineItem</value> 
     ... 
    </list> 
    </property> 
</bean> 
+0

La dichiarazione del bean deve essere inserita nel contesto DispatcherServlet? O in un altro file di configurazione di Spring Framework? E anche quando ho dichiarato le mie classi di persistenza in hibernate.cfg.xml, dovrei anche impostare una factory di sessione di Hibernate basata su annotazione in Spring Security? – woyaru

5

Puoi usare annotazioni sulla tua classe, anche se per Hibernate non sono sicuro che ci sia qualcosa di integrato (da usare in primavera). This thread dovrebbe essere d'aiuto se vuoi evitare ancora più tecnologia, ma potresti anche utilizzare Java Persistence Annotations (JPA) insieme a Hibernate per raggiungere lo stesso obiettivo.

Here's un buon tutorial per l'utilizzo di JPA + Hibernate + Spring.

3

@Pascal Thivent offre un ottimo inizio a ciò che si desidera fare. Per ogni classe Entity dovrai annotarle. Questo è il documento che expalin il annotations in Hibernate.

ad es. Dalla documentazione:

@Entity 
    public class Flight implements Serializable { 
    Long id; 

    @Id 
    public Long getId() { return id; } 

    public void setId(Long id) { this.id = id; } 
    } 

Quindi, oltre a quello che è stato citato da @Pascal Thivent si dovrebbe ottenere tutto il necessario.

Problemi correlati