Diferencia entre revisiones de «Hibernate Con Spring»

De Dos Ideas.
Saltar a: navegación, buscar
(Página nueva: Spring Framework provee amplio soporte para Hibernate. En particular, brinda implementaciones de DAO que ofrecen diversas utilidades para acceder a la session de Hibernate...)
 
Línea 14: Línea 14:
 
==== La interfaz del DAO ====
 
==== La interfaz del DAO ====
 
La interfaz de nuestro DAO es simple, y no necesita tener ninguna herencia ni restricción en particular:
 
La interfaz de nuestro DAO es simple, y no necesita tener ninguna herencia ni restricción en particular:
 
+
<code java>
 
  public interface InvasorDao {
 
  public interface InvasorDao {
 
     guardarInvasor(Invasor invasor);
 
     guardarInvasor(Invasor invasor);
 
  }
 
  }
 
+
</code>
  
 
==== La implementación del DAO ====
 
==== La implementación del DAO ====
 
La implementación del DAO deberá extender !HibernateDaoSupport. Esta clase nos proveerá de varios métodos útiles para manipular la session de Hibernate.
 
La implementación del DAO deberá extender !HibernateDaoSupport. Esta clase nos proveerá de varios métodos útiles para manipular la session de Hibernate.
 
+
<code java>
 
  public class InvasorDaoImpl extends HibernateDaoSupport implements InvasorDao  {
 
  public class InvasorDaoImpl extends HibernateDaoSupport implements InvasorDao  {
 
     public void guardarInvasor(Invasor invasor) {
 
     public void guardarInvasor(Invasor invasor) {
Línea 28: Línea 28:
 
     }
 
     }
 
  }
 
  }
 +
</code>
  
 
==== La declaracion del Dao ====
 
==== La declaracion del Dao ====
 
En el XML de Spring deberemos declarar el Dao y la Factory de Hibernate. Al Dao se le asocia el factory de Hibernate del cual Spring sacará la session de Hibernate.
 
En el XML de Spring deberemos declarar el Dao y la Factory de Hibernate. Al Dao se le asocia el factory de Hibernate del cual Spring sacará la session de Hibernate.
<pre>
+
<code xml>
 
  <bean id="dao.!nvasorDao" class="com.dosideas.dao.impl.InvasorDaoImpl">
 
  <bean id="dao.!nvasorDao" class="com.dosideas.dao.impl.InvasorDaoImpl">
 
     <property name="sessionFactory" ref="defaultSessionFactory"/>
 
     <property name="sessionFactory" ref="defaultSessionFactory"/>
Línea 50: Línea 51:
 
     </property>
 
     </property>
 
  </bean>
 
  </bean>
</pre>
+
</code>
  
 
===Uso de la Session directamente===
 
===Uso de la Session directamente===
Línea 57: Línea 58:
 
La misma clase del ejemplo anterior quedaría:
 
La misma clase del ejemplo anterior quedaría:
  
<pre>
+
<code java>
 
  public class InvasorDaoImpl extends HibernateDaoSupport implements InvasorDao  {
 
  public class InvasorDaoImpl extends HibernateDaoSupport implements InvasorDao  {
 
     public void guardarInvasor(Invasor invasor) {
 
     public void guardarInvasor(Invasor invasor) {
Línea 70: Línea 71:
 
     }
 
     }
 
  }
 
  }
</pre>
+
</code>
 
 
  
 
==Ver también==
 
==Ver también==
 
* [[Consultas Con HibernateTemplate]]
 
* [[Consultas Con HibernateTemplate]]
 
* [http://static.springframework.org/spring/docs/2.0.x/reference/orm.html Manual de Spring, Capítulo 12]
 
* [http://static.springframework.org/spring/docs/2.0.x/reference/orm.html Manual de Spring, Capítulo 12]

Revisión del 19:08 17 ago 2008

Spring Framework provee amplio soporte para Hibernate. En particular, brinda implementaciones de DAO que ofrecen diversas utilidades para acceder a la session de Hibernate.

La clase HibernateDaoSupport

Spring nos provee la clase HibernateDaoSupport para brindarle a nuestros DAO soporte para Hibernate.

HibernateTemplate

En particular, uno de los métodos más útiles que provee es getHibernateTemplate(). Este método devuelve un template con varios métodos útiles, que simplifican el uso de Hibernate. Estos métodos suelen encapsular varias excepciones propias de acceso a datos de Hibernate (y SQL) dentro de una DataAccessException (que hereda de RuntimeException).

Creando un DAO con soporte de Spring

La forma más simple de usar Hibernate con Spring es crear clases que hereden de !HibernateDaoSupport. Esta clase ofrece varias utilidades para manipular la session de Hibernate, y se encarga de manejar automáticamente las transacciones.

La interfaz del DAO

La interfaz de nuestro DAO es simple, y no necesita tener ninguna herencia ni restricción en particular:

public interface InvasorDao {
    guardarInvasor(Invasor invasor);
}

La implementación del DAO

La implementación del DAO deberá extender !HibernateDaoSupport. Esta clase nos proveerá de varios métodos útiles para manipular la session de Hibernate.

public class InvasorDaoImpl extends HibernateDaoSupport implements InvasorDao   {
    public void guardarInvasor(Invasor invasor) {
        getHibernateTemplate().save(invasor);
    }
}

La declaracion del Dao

En el XML de Spring deberemos declarar el Dao y la Factory de Hibernate. Al Dao se le asocia el factory de Hibernate del cual Spring sacará la session de Hibernate.

<bean id="dao.!nvasorDao" class="com.dosideas.dao.impl.InvasorDaoImpl">
    <property name="sessionFactory" ref="defaultSessionFactory"/>
</bean>
<bean id="defaultSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="defaultDataSource" />
    <property name="mappingResources">
        <list>
               <value>com/dosideas/domain/map/Invasor.hbm.xml</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
           <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
        </props>
    </property>
</bean>

Uso de la Session directamente

Es posible utilizar la Session de Hibernate directamente, a través del método getSession() que provee HibernateDaoSupport. Cuando se pide la Session de esta manera, es fundamental liberarla al finalizar su uso con el método releaseSession().

La misma clase del ejemplo anterior quedaría:

public class InvasorDaoImpl extends HibernateDaoSupport implements InvasorDao   {
    public void guardarInvasor(Invasor invasor) {
        Session session;
        try {
            session = getSession();
            session.save(invasor);
        }
        finally {
            releaseSession(session);
        }
    }
}

Ver también