0

我有一个业务逻辑类,它尝试使用从通用 Dao 保存的 dao 方法,这是来自 bl 的代码。

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

调试我发现用户对象正确填充了数据,而 DaoImpl 就是这个

@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;
}

这是我使用的通用类。

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();

       }



}

有人可以帮助理解为什么我在保存()中使用对象用户时收到此错误。

谢谢。

4

2 回答 2

1

确保容器创建 dao 对象 bean 并注入您的服务类 尝试以下-

确保您在标签/注释之后添加了您的弹簧配置文件/类-

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

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

于 2017-08-07T02:10:47.603 回答
0

好吧,由于所有人的帮助,我的休眠会话 bean 声明中有一个错误

于 2017-08-09T19:33:15.963 回答