【问题标题】:NullPointerException in SELECT query in Spring HibernateSpring Hibernate 中的 SELECT 查询中的 NullPointerException
【发布时间】:2013-11-14 14:59:03
【问题描述】:

我在使用这个 Java DAO 时遇到了 NullPointerException:

public abstract class AbstractDAO<BEAN extends Serializable, 
                                  ID extends Serializable> 
                                  extends HibernateDaoSupport 
                                  implements IDAO<BEAN, ID> {
   private Class<BEAN> beanClass;
   public AbstractDAO() {
   }   
   public AbstractDAO(Class<BEAN> clazz) {
      beanClass = clazz;
   }

   /**
    * {@inheritDoc}
    */
   @Transactional
   public BEAN findById(ID id) {
      @SuppressWarnings("unchecked")
      BEAN instance = 
          (BEAN) getSessionFactory().getCurrentSession().get(beanClass, id);
      return instance;
   }
}
public class TestCaseDAO extends AbstractDAO<TestCase, Long> {
   public TestCaseDAO(Class<TestCase> clazz) {
      super(clazz);
   }
   public TestCaseDAO() {
   }
   @Override
   public void persist(TestCase transientInstance) {
   }
}

我得到的异常:

Exception in thread "main" java.lang.NullPointerException

谁能帮帮我?

【问题讨论】:

    标签: java spring hibernate


    【解决方案1】:

    您正在创建 TestCaseDAO bean 而不指定 beanClass

    <bean id="testCaseDAO" class="com.germin8.autom8.db.hb.dao.TestCaseDAO"
        parent="abstractDAO"></bean> 
    

    Spring 将使用空的TestCaseDAO 的无参数构造函数。

    这段代码何时执行

    BEAN instance =  (BEAN) getSessionFactory().getCurrentSession().get(beanClass, id);
    

    beanClassnull。这会抛出一个NullPointerException

    既然您知道TestCaseDAO 仅适用于TestCase,请更改为

    public TestCaseDAO() {
        super(TestCase.class);
    }
    

    并摆脱您的其他构造函数。对您的其他 AbstractDAO 实现执行类似的更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多