今天出现这个错误:'sessionFactory' or 'hibernateTemplate' is required

本文详细解析了在Spring零配置环境下,当impl类出现SessionFactory注入错误时的解决方案。通过使用@Resource注解、在配置文件中配置或自定义方法注入SessionFactory,实现了SessionFactory的正确注入,进而解决了错误。此外,文章还介绍了HibernateDaoSupport类如何自动处理事务,并解释了在继承此类的DAO实现中,SessionFactory的管理由Spring负责,显著提高了数据库访问性能。

在对spring零配置的时候:

impl类里面 出现以上的错误:

出现此错误的原因是因为sessionfactory没有注入

注入方法:

@Resource(name="sessionFactory")
public void setSessionFacotry(SessionFactory sessionFacotry) {      
                super.setSessionFactory(sessionFacotry);      
    }     

那么为什么会这样的?

此Impl方法里面继承了HibernateDaoSupport方法:

关于HibernateDaoSupport方法,一下是百度的说法:

     如果你选择这种设计,就需要动态注入SessionFactory而HibernateDaoSupport包含这个属性.这个类提供了一个方便的方法getHibernateTemplate(); 就能得到HibernateTemplate的一个实例.它也有getSession()和releaseSession,以便于你应为某些原因而不使用HibernateTempate的情况下执行Hibernate操作。

  HibernateDaoSupport提供了基于AOP事务的自动处理,程序员完全可以不用理会事务的开始与提交。在JDBC中一个Connection对象使用一个事务,那么在Hibernate中一个事务肯定要关联一个SessionFactory了,然而这个SessionFactory却没有在DAO中体现。其实主要的原因是HibernateDaoSupport类已经默默地做了封装的工作,它用一个setSessionFactory方法将SessionFactory进行注入,所以继承自HibernateDaoSupport类的DAO都会具有SessionFactory的属性,从而可以通过SessionFactory创建Session实例操作数据库。
  在继承HibrnateDaoSupport的DAO实现里,Hibernate Session的管理完全不需要Hibernate代码打开,而由Spring来管理。Spring会根据实际的操作,采用“每次事务打开一次session”的策略,自动提高数据库访问的性能。


解决这个错误有三种方法:

1:就是如上:

@Resource(name="sessionFactory")
public void setSessionFacotry(SessionFactory sessionFacotry) {
         super.setSessionFactory(sessionFacotry); 
}  
或者
private SessionFactory sessionFactory;
public void setSessionFacotry(SessionFactory sessionFacotry) { 
        super.setSessionFactory(sessionFacotry); 
}  

2在配置文件里面配置:

类似这样:

<bean id="managerDao" class="com.thinkbank.j2eeblog.dao.ManagerDaoImpl">
		<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
3.自己写一个方法,继承HibernateDaoSupport,把SessionFactory注入进去就够了。你的持久层调用此方法就够了。

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值