2013-11-14 125 views
-2

我得到一个NullPointerException与此Java DAO:的NullPointerException在SELECT查询春季休眠

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 

任何人都可以请帮我吗?

回答

1

您无需指定beanClass

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

Spring将使用的TestCaseDAO无参数的构造函数里面是空的创建TestCaseDAO豆。

当该代码执行

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

beanClassnull。这会抛出一个NullPointerException下线。

既然你知道TestCaseDAOTestCase只,改为

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

,摆脱你的其他构造。对其他AbstractDAO实现执行类似的更改。