Hibernate Annotations con Spring

De Dos Ideas.
Revisión del 20:22 10 dic 2009 de 201.251.182.130 (discusión) (Ejemplo de uso)
Saltar a: navegación, buscar

Para utilizar las anotaciones de Hibernate junto con Spring tenemos que reemplazar en el archivo application-hibernate.xml la clase org.springframework.orm.hibernate3.LocalSessionFactoryBean por org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean:

Ejemplo de uso

<bean id="sessionFactory" 
 class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
 <property name="dataSource" ref="dataSource" />   
 <property name="annotatedClasses">
    <list>
      <value>com.app.domain.Cliente</value>              
    </list>
  </property>
<property name="hibernateProperties">
 <props>      
    <prop key="hibernate.show_sql">true</prop>     
 </props>
</property>      
</bean> 

Querys con Spring

@Entity 
@Table (name="cliente") 

//DECLARO LOS QUERIES 
@NamedQueries(
 {@NamedQuery(name="buscarPorIdCliente",
    query="select a from Cliente a where a.idCliente= ?"),

 @NamedQuery(name="buscarPorIdSucursal", 
  query="select a from miTabla a where a.idSucursal= ?")})
public class Cliente{  
   @Id 
   @Column (name="COD_CLIENTE")
   private Long id;

   @Column (name="COD_SUCURSAL")    
   private String idSucursal;

   .................
}

DAO

public class ClienteDaoImpl extends  HibernateDaoSupport implements ClienteDao {

   public Collection buscarPorIdCliente(String idCliente) {
      return  getHibernateTemplate().
      findByNamedQuery("buscarPorIdCliente", idCliente);
   }

   public Collection buscarPorIdSucursal(String idSucursal) {
          return  getHibernateTemplate().
                   findByNamedQuery("buscarPorIdSucursal", idSucursal);     
   }
} 

Mapeo de Recursos y Mapeo de Clases Anotadas

En el archivo de configuración application-hibernate.xml se puede mezclar el mapeo a archivos xml y a clases anotadas sin problemas. Esto nos será muy útil al momento de "migrar" una aplicación de mapeo en archivos xml a clases anotadas, pudiendo hacer la migración en forma progresiva.

La clase del SessionFactory que se debe utilizar en estos casos tambien es:

org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean

<bean id="sessionFactory" 
 class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
 <property name="dataSource" ref="dataSource" />   
 <property name="annotatedClasses">
    <list>
      <value>com.app.domain.Cliente</value>              
    </list>
  </property>
 <property name="mappingResources">
    <list>
      <value>com/app/domain/Cliente</value>              
    </list>
  </property>
<property name="hibernateProperties">
 <props>      
    <prop key="hibernate.show_sql">true</prop>     
 </props>
</property>      
</bean> 

Noten que mientras los mapeos por archivos XML DEBEN nombrarse con / (barra) entre los directorios, las clases anotadas DEBEN nombrarse con . (punto).