【发布时间】:2014-12-02 05:59:40
【问题描述】:
我创建了一个 spring 应用程序,我决定添加一个 BaseDAO 来消除冗余创建, 每个 dao 的更新、删除、findByid 和 findAll 方法。所以我创建了一个 baseDao,每个 dao 都应该扩展这个 BaseDAO。
BaseDaoImpl
public class BaseDAOImpl implements BaseDAO{
SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sf){
this.sessionFactory = sf;
}
@Override
public void create(ModelBase modelBase) {
Session session = this.sessionFactory.getCurrentSession();
session.persist(modelBase);
}
@Override
public void update(ModelBase modelBase) {
Session session = this.sessionFactory.getCurrentSession();
session.update(modelBase);
}
@Override
public Collection findAll(Class aClass) {
Session session = this.sessionFactory.getCurrentSession();
Collection modelCols = session.createQuery("from "+aClass.getSimpleName()).list();
return modelCols;
}
@Override
public ModelBase findById(Class aClass, Integer id) {
Session session = this.sessionFactory.getCurrentSession();
ModelBase modelBase = (ModelBase) session.load(aClass, new Integer(id));
return modelBase;
}
}
然后我将这个 Dao 扩展到每个 DAO
EmployeeDAOImp
public class EmployeeDAOImpl extends BaseDAOImpl implements EmployeeDAO{
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sf){
this.sessionFactory = sf;
}
}
我创建了一个这样的 BaseService。但是当我尝试从 EmployeeDAO 访问 BaseDAO 方法时,它返回空指针异常。 为什么会发生这种情况。我不想使用谷歌的 genericDAO。因为我们应该创建 DAO 对于每个模型。我想消除这个。所以我就按照这个方法。
【问题讨论】:
-
请提供您的空指针异常的堆栈跟踪,它将准确描述失败的原因。您的代码中明显的失败是您隐藏了 SessionFactory 的定义。删除 EmployeeDAOImpl 中发布的正文可能会解决您的问题。
标签: java spring spring-mvc