2013-11-14 3 views
-2

Я получаю NullPointerException с этим Java DAO:NullPointerException в запросе SELECT, в Spring Hibernate

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

Вы создаете свой TestCaseDAO боб без указания 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); 

beanClass является null. Это выдает NullPointerException по линии.

Поскольку вы знаете, что TestCaseDAO для TestCase только, чтобы изменить

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

и избавиться от другого конструктора. Выполните аналогичные изменения в других версиях AbstractDAO.

Смежные вопросы