2012-06-25 23 views
5

soy nuevo en la integración de jsf 2.0 spring 3.1 e hibernate 4.1. ¿Cómo puedo cambiar el código siguiente, porque hibernate 4.0 no incluye HibernateDaoSupport?HibernateDaoSupport en hibernate 4.0

import org.springframework.orm.hibernate3.support.HibernateDaoSupport; 


    public class CustomerDaoImpl extends 
      HibernateDaoSupport implements CustomerDao{ 

     public void addCustomer(Customer customer){ 

      customer.setCreatedDate(new Date()); 
      getHibernateTemplate().save(customer); 

     } 

     public List<Customer> findAllCustomer(){ 

      return getHibernateTemplate().find("from Customer"); 

     } 
    } 

Estoy tratando esta muestra: http://www.mkyong.com/jsf2/jsf-2-0-spring-hibernate-integration-example/

+0

[Posible duplicado] (http: // stackoverflow.com/questions/10818291/spring-3-1-hibernate-4-hibernatetemplate) –

Respuesta

11

he encontrado la solución. Debo usar sesión de fábrica en su lugar.

import java.util.List; 

import org.hibernate.SessionFactory; 

public class CustomerDaoImpl implements CustomerDao{ 
    private SessionFactory sessionFactory; 
    public SessionFactory getSessionFactory() { 
     return sessionFactory;} 
    public void setSessionFactory(SessionFactory sessionFactory) { 
     this.sessionFactory = sessionFactory; 
    } 

    public void addCustomer(Customer customer){ 


     getSessionFactory().getCurrentSession().save(customer); 

    } 

    public List<Customer> findAllCustomer(){ 

     List list = getSessionFactory().getCurrentSession().createQuery("from Customer").list(); 
     return list; 

    } 
} 
+0

Para mí este código se ejecuta en el error 'class org.hibernate.HibernateException guardar no es válido sin transacción activa' Así que tengo que extender' addCustomer 'y terminan con' Transaction trans = getSessionFactory(). getCurrentSession(). beginTransaction(); \t \t getSessionFactory(). GetCurrentSession(). Save (p); \t \t trans.commit(); ' – StellaMaris

3

Otra manera de conseguir hibernar sesión a través de la anotación como seguir

@Autowired 
@Qualifier("sessionFactory") 
private SessionFactory sessionFactory; 

public Session getSession() { 
    return sessionFactory.getCurrentSession(); 
} 

frijol SessionFactory en applicationContext.xml primavera

<!-- sessionFactory --> 
    <bean id="sessionFactory" 
      class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="packagesToScan"> 
      <list> 
       <value></value> 
      </list> 
     </property> 
     <property name="hibernateProperties"> 
      <props></props> 
     </property> 
     <property name="dataSource"> 
      <ref bean="dataSource" /> 
     </property> 
    </bean> 
-2

Puede utilizar Hibernate DAO Apoyo al extender la clase HibernateDAOSupport y primordial su método afterPropertiesSet().

Este método se llama en el soporte HibernateDAO y en ese momento desde que sessionFactory es nulo está arrojando este error. En la clase personalizada puede establecer esta propiedad explícitamente y luego llamar al mismo método de la clase padre (es decir, de addProperties HibernateDAOSupport() método)

package com.techcielo.spring4.hibernate.template; 

import org.hibernate.SessionFactory; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.orm.hibernate3.HibernateTemplate; 
import org.springframework.stereotype.Component; 

@Component("hibernateTemplate") 
public class Hibernate4CustomTemplate extends HibernateTemplate{ 

    @Autowired(required=true) 
    private SessionFactory sessionFactory; 
    public void setSessionFactory(SessionFactory sessionFactory) { 
     System.out.println("Setting SessionFactory"); 
     this.sessionFactory = sessionFactory; 
     super.setSessionFactory(sessionFactory); 
    } 

    @Override 
    public void afterPropertiesSet() { 
    System.out.println("Checking if properties set..."+this.sessionFactory); 
    setSessionFactory(sessionFactory); 
    super.afterPropertiesSet(); 
    } 
} 

siguiente se puede utilizar para sample!

+1

Tenga en cuenta que [se desaconsejan las respuestas solo de enlace] (http://meta.stackoverflow.com/tags/link-only-answers/info), entonces las respuestas deben ser el final- punto de una búsqueda de una solución (frente a otra escala más de referencias, que tienden a quedar obsoletas en el tiempo). Considere agregar una sinopsis independiente aquí, manteniendo el enlace como referencia. – kleopatra

1

Como Samira dijo anteriormente, sustituyendo "SessionFactory" para "HibernateDaoSupport" es el "enfoque correcto" para cualquier nuevo código de primavera/Hibernate:

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/orm/hibernate4/support/HibernateDaoSupport.html

NOTA: Hibernate código de acceso también puede codificado en Hibernate simple estilo. Por lo tanto, para proyectos recién iniciados, considere adoptar el estilo Hibernate estándar de codificación de objetos de acceso a datos en su lugar, basado en en SessionFactory.getCurrentSession(). Este HibernateTemplate existe principalmente como ayuda de migración para el código de acceso de datos basados ​​en Hibernate 3, para beneficiarse de las correcciones de errores en Hibernate 4.x.

Sin embargo ... también se presentó contra el mismo problema en uno de los tutoriales Mkyong.com:

http://www.mkyong.com/spring/maven-spring-hibernate-mysql-example/

estoy utilizando Spring e Hibernate 4.3.8 4.2.4.RELEASE .Final.

La solución más conveniente para mí (para poner el tutorial en funcionamiento) es utilizar el soporte integrado de Spring-orm para HibernateDaoSupport. En concreto, acabo de cambiar la línea con la importación de "Hibernate3" a "hibernate4":

StockDaoImpl.java =>

package com.mkyong.stock.dao.impl; 
... 
// import org.springframework.orm.hibernate3.support.HibernateDaoSupport; 
import org.springframework.orm.hibernate4.support.HibernateDaoSupport; 
... 

En caso de que alguien se encuentra con el mismo problema :)