我的DAO 继承 HibernateOperations,想法到实施中出错。

本文探讨了在Spring框架下集成Hibernate的方式,作者尝试通过自定义DAO实现继承HibernateOperations接口,并利用HibernateDaoSupport进行sessionFactory注入,但在实际操作中遇到了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我一直在想,Spring 里的 HibernateTemplate 已经做得很完善了,为什么我们的实现不也继承他呢?
我们的DAO也可以继承HibernateOperations接口,这样一来,我们是不是不用再重复写HibernateOperations接口里所有的方法了呢?
如果要扩展我们自己的方法可以写在Manager里,而Manager又可以继承我们的DAO,然后ManagerImpl可以再继承DAOImpl的。

这只是一个想法,也在实施中出错了。

一般的实现我们都会继承HibernateDaoSupport,然后再通过this.getHibernateTemplate()....

先不说那么多了,贴一下我的代码:

接口BaseDAO

public interface BaseDAO extends HibernateOperations {
}


实现BaseDAOImpl,并试图用HibernateDaoSupport里的方法在实现里注入sessionFactory

public class BaseDAOImpl extends HibernateTemplate implements BaseDAO {

/**
* Set the Hibernate SessionFactory to be used by this DAO.
* Will automatically create a HibernateTemplate for the given SessionFactory.
* @see #createHibernateTemplate
* @see #setHibernateTemplate
*/
public void setSessionFactory(SessionFactory sessionFactory) {
this.createHibernateTemplate(sessionFactory);
}
/**
* Create a HibernateTemplate for the given SessionFactory.
* Only invoked if populating the DAO with a SessionFactory reference!
* <p>Can be overridden in subclasses to provide a HibernateTemplate instance
* with different configuration, or a custom HibernateTemplate subclass.
* @param sessionFactory the Hibernate SessionFactory to create a HibernateTemplate for
* @return the new HibernateTemplate instance
* @see #setSessionFactory
*/
protected HibernateTemplate createHibernateTemplate(SessionFactory sessionFactory) {
return new HibernateTemplate(sessionFactory);
}

/**
* Return the Hibernate SessionFactory used by this DAO.
*/
public SessionFactory getSessionFactory() {
return super.getSessionFactory();
}
}


接口BaseManager ,这里用来扩展我们需要的方法,如分页。

public interface BaseManager extends BaseDAO {

/**
* 通过持久化对象类型,和输入参数,开始记录和查询记录数,返回查询列表
* @param entityClass Class
* @param firstResult int
* @param maxResult int
* @return List
*/
public List findToPage(Class entityClass, int firstResult, int maxResult);
}


实现BaseManagerImpl ,这里注入BaseDAO

public class BaseManagerImpl extends BaseDAOImpl implements BaseManager {
private BaseDAO baseDAO ;

public BaseDAO getBaseDAO() {
return baseDAO;
}

public void setBaseDAO(BaseDAO baseDAO) {
this.baseDAO = baseDAO;
}

public List findToPage(Class entityClass, int firstResult, int maxResult) {
baseDAO......
}

}


我的代码就是这些,但是我在启动服务器时,告诉我注入sessionFactory注入错误,然后我又看了HibernateDaoSupport里面注入sessionFactory,接着拷贝,然后提示sessionFactory和baseDAO无法注入。

javaeye里的各位大哥们,我想实现这样的想法,需要怎么做呢?

这样的想法是否是对的,是不是DAO太大了?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值