2009-10-31 19 views
9

en mi applicationContext.xml, así es como mapeo xml a POJO. cómo mapear el directorio al archivo de la clase sin necesidad de crear xml?clase de mapeo spring + hibernate sin 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> 

Respuesta

23

Y se puede simplificar aún más las cosas mediante la conversión de

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

en su AnnotationSessionFactoryBean por lo que ahora todas las clases con anotada @Entity en el paquete com.mycompany.sample.domain serán recogidos automáticamente.

+0

¿A qué debo convertir el mapeo de clases en mi AnnotationSessionFactoryBean? –

+0

@JiayiZhou ¿Puede explicar, no entiendo exactamente lo que está preguntando? –

+0

Si estoy en una de mi Entidad, agrego una propiedad que la asignación de OneToOne a otra entidad. ¿Qué debería agregar en la configuración Spring Framework xml para que funcione? Puede verificar los detalles de mi pregunta aquí: http://stackoverflow.com/questions/40956208/how-to-configure-hibernate-onetoone-mapping-using-spring-framework –

17

En lugar de utilizar archivos de mapeo XML, puede utilizar la biblioteca Hibernate Annotations que se basa en Java 5 anotaciones.

Como de costumbre, tendrá que declarar las clases de persistencia en el archivo de configuración de Hibernate (típicamente hibernate.cfg.xml), aunque se utiliza el elemento de <mapping> para declarar sus clases persistentes:

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

Si está utilizando el marco Spring, puede configurar una fábrica de sesiones Hibernate basada en anotaciones usando la clase AnnotationSessionFactoryBean, como se muestra aquí:

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

¿Su declaración de beans debe colocarse en el contexto del servidor Dispatcher? ¿O en otro archivo de configuración de Spring Framework? Y también cuando he declarado mis clases de persistencia en hibernate.cfg.xml) ¿debería también configurar una fábrica de sesiones de Hibernate basada en anotaciones en Spring Security? – woyaru

5

Puede usar anotaciones en su clase, aunque para Hibernate no estoy seguro de que haya algo incorporado (para usar en Spring). This thread debería ayudar si desea evitar aún más tecnología, pero también podría usar Java Persistence Annotations (JPA) en concierto con Hibernate para lograr el mismo objetivo.

Here's un buen tutorial para usar JPA + Hibernate + Spring.

3

@Pascal Thivent le da un muy buen comienzo para lo que quiere hacer. Para cada clase de Entidad, deberá anotarlos. Estos son los documentos que expanden el annotations in Hibernate.

p. Ej. A partir de los documentos:

@Entity 
    public class Flight implements Serializable { 
    Long id; 

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

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

Así que además de lo mencionado por @Pascal Thivent usted debe conseguir todo lo que necesita.