简体   繁体   English

NullPointerException使用Spring休眠通用Dao

[英]NullPointerException hibernate Generic Dao with Spring

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. 我有一个业务逻辑类,尝试使用从通用Dao中保存的dao方法,这是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 调试我发现用户对象正确填充了数据,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;
}

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(). 有人可以帮助您理解为什么在save()中使用对象用户时出现此错误的原因。

Thanks. 谢谢。

Make sure that container creating dao object bean and injecting in your service class try following-- 确保创建dao对象bean并注入服务类的容器尝试以下操作-

make sure that you Added your spring configuration file/class following tag/ annotation-- 确保您在标签/注释之后添加了spring配置文件/类-

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

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM