0

i have a bussiness logic class that try to use a dao method save from a generic Dao this is the code from the bl.

public void setUsuario(Usuario usuario) {
    this.usuario = usuario;
    usuarioDao.save(usuario);
}

Debugging i found out that user object is filled with data properly and the DaoImpl is this

@Component
public class UsuarioDaoImpl extends GenericDaoImpl<Usuario> implements UsuarioDao {

@Override
public Usuario get(String id) throws DataAccessException {
    // TODO Auto-generated method stub
    return null;
}

@Override
public boolean saveBatchFull(Collection<Usuario> entity, boolean update) throws DataAccessException {
    // TODO Auto-generated method stub
    return false;
}

@Override
public Usuario get(Long id) throws DataAccessException {
    // TODO Auto-generated method stub
    return null;
}

@Override
public boolean save(Usuario usuario) throws DataAccessException {
    super.save(usuario);
    return false;
}

and this is the generic classes im using.

import java.lang.reflect.ParameterizedType;
import java.util.Collection;
import java.util.Iterator;
import org.slf4j.LoggerFactory;
import org.apache.log4j.LogManager;
import org.apache.logging.log4j.*;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.transaction.annotation.Transactional;


public class GenericDaoImpl<T> implements GenericDao<T> {



       private static final Logger logger = LogManager.getLogger("GenericDaoImpl");



       protected Class<T> domainClass;



//         @Autowired(required = true)
           protected SessionFactory sessionFactory;



       // Para conexion sin Injection Dependency

       private Transaction transactionNoID;



       public GenericDaoImpl() {

             // Constructor default

       }



       // Obtener el objeto

       @SuppressWarnings({ "unchecked", "rawtypes" })

       protected Class<T> getDomainClass() {

             if ( domainClass == null ) {

                    ParameterizedType thisType = (ParameterizedType) getClass().getGenericSuperclass();

                    domainClass = (Class) thisType.getActualTypeArguments()[0];

             }

             return domainClass;

       }



       @SuppressWarnings("unchecked")

       @Transactional(readOnly = true)

       public T get(Long id) throws DataAccessException {

             Session session = null;

             if ( sessionFactory != null ) {

                    session = this.sessionFactory.getCurrentSession();

             }



             String listQuery;

             StringBuilder sb = new StringBuilder(" from ");

                    sb.append(this.getDomainClass().getName());

                    sb.append(" entity ");

                    sb.append(" where id = :id ");

             listQuery = sb.toString();



             T result = null;



             if ( session == null ) {

                    session = SessionFactoryUtil.getSessionFactory().openSession();

                    try {

                           result = (T) session.createQuery(listQuery).setLong("id", id).uniqueResult();

                    } catch (Exception e) {

                           e.printStackTrace();

                           logger.info("Error en la clase: " + this.getClass().getName() + " - " + e.getMessage());

                    } finally {

                           session.close();

                    }

             } else {

                    try {                     

                           result = (T) session.createQuery(listQuery).setLong("id", id).uniqueResult();

                    } catch (Exception e) {

                           e.printStackTrace();

                           logger.info("Error en la clase: " + this.getClass().getName() + " - " + e.getMessage());

                    }

             }


             return result;

       }



       @SuppressWarnings("unchecked")

       @Transactional(readOnly = true)

       public T get(String id) throws DataAccessException {

             Session session = null;

             if ( sessionFactory != null ) {

                    session = this.sessionFactory.getCurrentSession();

             }



             String listQuery;

             StringBuilder sb = new StringBuilder(" from ");

                    sb.append(this.getDomainClass().getName());

                    sb.append(" entity ");

                    sb.append(" where id = :id ");

             listQuery = sb.toString();



             T result = null;



             if ( session == null ) {

                    session = SessionFactoryUtil.getSessionFactory().openSession();

                    try {

                           result = (T) session.createQuery(listQuery).setString("id", id).uniqueResult();

                    } catch (Exception e) {

                           e.printStackTrace();

                           logger.info("Error en la clase: " + this.getClass().getName() + " - " + e.getMessage());

                    } finally {

                           session.close();

                    }

             } else {

                    try {                     

                           result = (T) session.createQuery(listQuery).setString("id", id).uniqueResult();

                    } catch (Exception e) {

                           e.printStackTrace();

                           logger.info("Error en la clase: " + this.getClass().getName() + " - " + e.getMessage());

                    }

             }



             return result;

       }



       @SuppressWarnings("unchecked")

       @Transactional(readOnly = true)

       public Collection<T> list() throws DataAccessException {

             Session session = null;

             if ( sessionFactory != null ) {

                    session = this.sessionFactory.getCurrentSession();

             }



             String listQuery;

             StringBuilder sb = new StringBuilder(" from ");

                    sb.append(this.getDomainClass().getName());

                    sb.append(" entity ");

             listQuery = sb.toString();



             Collection<T> result = null;



             if ( session == null ) {

                    session = SessionFactoryUtil.getSessionFactory().openSession();

                    try {

                           result = session.createQuery(listQuery).list();

                    } catch (Exception e) {

                           e.printStackTrace();

                           logger.info("Error en la clase: " + this.getClass().getName() + " - " + e.getMessage());

                    } finally {

                           session.close();

                    }

             } else {

                    try {                     

                           result = session.createQuery(listQuery).list();

                    } catch (Exception e) {

                           e.printStackTrace();

                           logger.info("Error en la clase: " + this.getClass().getName() + " - " + e.getMessage());

                    }

             }



             return result;

       }



       @SuppressWarnings("unchecked")

       @Transactional(readOnly = true)

       public Collection<T> listById(Long id) throws DataAccessException {

             Session session = null;

             if ( sessionFactory != null ) {

                    session = this.sessionFactory.getCurrentSession();

             }



             String listQuery;

             StringBuilder sb = new StringBuilder(" from ");

                    sb.append(this.getDomainClass().getName());

                    sb.append(" entity ");

                    sb.append(" where id = :id ");

             listQuery = sb.toString();



             Collection<T> result = null;



             if ( session == null ) {

                    session = SessionFactoryUtil.getSessionFactory().openSession();

                    try {

                           result = session.createQuery(listQuery).setLong("id", id).list();

                    } catch (Exception e) {

                           e.printStackTrace();

                           logger.info("Error en la clase: " + this.getClass().getName() + " - " + e.getMessage());

                    } finally {

                           session.close();

                    }

             } else {

                    try {                     

                           result = session.createQuery(listQuery).setLong("id", id).list();

                    } catch (Exception e) {

                           e.printStackTrace();

                           logger.info("Error en la clase: " + this.getClass().getName() + " - " + e.getMessage());

                    }

             }



             return result;

       }



       @SuppressWarnings("unchecked")

       @Transactional(readOnly = true)

       public Collection<T> listById(String id) throws DataAccessException {

             Session session = null;

             if ( sessionFactory != null ) {

                    session = this.sessionFactory.getCurrentSession();

             }



             String listQuery;

             StringBuilder sb = new StringBuilder(" from ");

                    sb.append(this.getDomainClass().getName());

                    sb.append(" entity ");

                    sb.append(" where id = :id ");

             listQuery = sb.toString();



             Collection<T> result = null;



             if ( session == null ) {

                    session = SessionFactoryUtil.getSessionFactory().openSession();

                    try {

                           result = session.createQuery(listQuery).setString("id", id).list();

                    } catch (Exception e) {

                           e.printStackTrace();

                           logger.info("Error en la clase: " + this.getClass().getName() + " - " + e.getMessage());

                    } finally {

                           session.close();

                    }

             } else {

                    try {                     

                           result = session.createQuery(listQuery).setString("id", id).list();

                    } catch (Exception e) {

                           e.printStackTrace();

                           logger.info("Error en la clase: " + this.getClass().getName() + " - " + e.getMessage());

                    }

             }



             return result;

       }



       @Transactional

       public boolean save(Object entity) throws DataAccessException {

             Session session = null;

             if ( sessionFactory != null ) {

                    session = this.sessionFactory.getCurrentSession();

             }



             if ( session == null ) {

                    session = SessionFactoryUtil.getSessionFactory().openSession();

                    try {

                           transactionNoID = session.beginTransaction();

                           session.saveOrUpdate(entity);

                           transactionNoID.commit();

                           return true;

                    } catch (Exception e) {

                           transactionNoID.rollback();

                           e.printStackTrace();

                           logger.info("Error en la clase: " + this.getClass().getName() + " - " + e.getMessage());

                    } finally {

                           session.close();

                    }

             } else {

                    try {                     

                           session.saveOrUpdate(entity);

                    } catch (Exception e) {

                           e.printStackTrace();

                           logger.info("Error en la clase: " + this.getClass().getName() + " - " + e.getMessage());

                    }

             }



             return false;

       }



       @Transactional

       public boolean saveNoUpdate(Object entity) throws DataAccessException {

             Session session = null;

             if ( sessionFactory != null ) {

                    session = this.sessionFactory.getCurrentSession();

             }



             if ( session == null ) {

                    session = SessionFactoryUtil.getSessionFactory().openSession();

                    try {

                           transactionNoID = session.beginTransaction();

                           session.save(entity);

                           transactionNoID.commit();

                           return true;

                    } catch (Exception e) {

                           transactionNoID.rollback();

                           e.printStackTrace();

                           logger.info("Error en la clase: " + this.getClass().getName() + " - " + e.getMessage());

                    } finally {

                           session.close();

                    }

             } else {

                    try {                     

                           session.save(entity);

                    } catch (Exception e) {

                           e.printStackTrace();

                           logger.info("Error en la clase: " + this.getClass().getName() + " - " + e.getMessage());

                    }

             }



             return false;

       }





       @SuppressWarnings({ "unchecked", "rawtypes" })

       @Transactional

       @Override

       public boolean saveBatchFull(Collection<T> entity, boolean update) throws DataAccessException {

             Session session = null;

             if ( sessionFactory != null ) {

                    session = this.sessionFactory.getCurrentSession();

             }



             if ( session == null ) {

                    session = SessionFactoryUtil.getSessionFactory().openSession();

                    try {

                           transactionNoID = session.beginTransaction();

                           for (Iterator iterator = entity.iterator(); iterator.hasNext();) {

                                  T t = (T) iterator.next();

                                  if ( update ) {

                                        session.saveOrUpdate(t);

                                  } else {

                                        session.save(t);

                                  }

                           }

                           transactionNoID.commit();

                           return true;

                    } catch (Exception e) {

                           transactionNoID.rollback();

                           e.printStackTrace();

                           logger.info("Error en la clase: " + this.getClass().getName() + " - " + e.getMessage());

                    } finally {

                           session.close();

                    }

             } else {

                    try {

                           for (Iterator iterator = entity.iterator(); iterator.hasNext();) {

                                  T t = (T) iterator.next();

                                  if ( update ) {

                                        session.saveOrUpdate(t);

                                  } else {

                                        session.save(t);   

                                  }

                           }

                           return true;

                    } catch (Exception e) {

                           e.printStackTrace();

                           logger.info("Error en la clase: " + this.getClass().getName() + " - " + e.getMessage());

                    }

             }



             return false;

       }



       public SessionFactory getSessionFactory() {

             return sessionFactory;

       }



       @Transactional

       public void flush() throws DataAccessException {

             sessionFactory.getCurrentSession().flush();

       }



}

could someone please help to understand why i get this error when the object user are use in save().

Thanks.

Andres
  • 45
  • 8
  • 1
    You're mixing container managed transaction and bean managed transaction, it won't work. Since you are using spring, you can follow a tutorial https://spring.io/guides/gs/accessing-data-jpa/ – André Aug 07 '17 at 02:08
  • @André Sorry im new in web development and i found you answer really confusing – Andres Aug 07 '17 at 22:25
  • You're not letting Spring manage the transaction for you. You need the `@Autowired` and the `@Transaction` only. That tutorial is everything you need. Scrape everything and read some other tutorials on Spring JPA until you get the hang of it. You won't go very far trying to get your code to work. – André Aug 08 '17 at 00:10
  • @André thanks man i will check your link, im missing a lot of concepts and that doesnt let me get my work done. – Andres Aug 08 '17 at 13:21

2 Answers2

1

Make sure that container creating dao object bean and injecting in your service class try following--

make sure that you Added your spring configuration file/class following tag/ annotation--

 @ComponentScan(BasePackages="fully Qualified dao class name")

or <context:component-scan="fully Qualified dao class name">

Navnath Adsul
  • 364
  • 3
  • 10
0

Well i had an error in my hibernate session bean declaration thanks to all for the help

Andres
  • 45
  • 8