zoukankan      html  css  js  c++  java
  • 'sessionFactory' or 'hibernateTemplate' is required解决方法

    这种情况就是在通过spring配置hibernate4的时候(注意,这里是hibernate4不是hibernate3,hibernate3的),使用的是HibernateDaoSupport的这种方式:

    public class BaseDao extends HibernateDaoSupport{

    *****

    }

    类似这种方式,然后在applicationContext.xml配置为:

    ***

    <!-- 配置 SessionFactory -->
    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="hibernateProperties" ref="hibernate-hibernateProperties"></property>
    <property name="packagesToScan" ref="hibernate-packagesToScan"></property>
    <property name="mappingLocations" ref="hibernate-mappingLocations"></property>
    </bean>

    <bean id="baseDao" class="com.myprj.auth.dao.BaseDao">
    <property name="sessionFactory">
    <ref bean="sessionFactory" />
    </property>
    </bean>

    结果一运行会报:

    'sessionFactory' or 'hibernateTemplate' is required 这种错误

    结果查看HibernateDaoSupport的源代码得知:setSessionFactory方法是:

    public final void setSessionFactory(SessionFactory sessionFactory) {
      if (this.hibernateTemplate == null || sessionFactory != this.hibernateTemplate.getSessionFactory()) {
       this.hibernateTemplate = createHibernateTemplate(sessionFactory);
      }
     }

    说明在子类中想通注解设置 sessionFactory (重写setter方法是不行的),那么怎么办,我们只能通过super.setSessionFactory ()调用

    解决办法:

    @Resource(name="sessionFactory")

    private void setMySessionFactory(SessionFactory sessionFactory){

      //这个方法名可以随便写,@Resource可以通过name 或者type来装载的。
      super.setSessionFactory(sessionFactory);
     }

    所以最终可以发现在applicationContext.xml配置文件中的这个bean:

    <bean id="baseDao" class="com.myprj.auth.dao.BaseDao">
    <property name="sessionFactory">
    <ref bean="sessionFactory" />
    </property>
    </bean>

    是没用的

    但是,注意,这里是hibernate4不是hibernate3,hibernate3是可以这样配置的,在使用hibernate3的spring sessionFactory中可以通过在applicationContext.xml文件中:

    <bean id="baseDao" class="com.myprj.auth.dao.BaseDao">
    <property name="sessionFactory">
    <ref bean="sessionFactory" />
    </property>
    </bean>

    然后直接写:

    public class BaseDao extends HibernateDaoSupport{

    *****

    }就可以

  • 相关阅读:
    【linux】统计文件夹中文件行数
    【python】__import__
    【深度学习】吴恩达网易公开课练习(class2 week1 task2 task3)
    【python】多进程共享变量Manager
    【python】随机数用法
    【深度学习】吴恩达网易公开课练习(class2 week1)
    DIY博客园的博客皮肤
    电子图书馆(仿百度文库)
    查看html元素绑定的事件与方法的利器
    HyPer: A Hybrid OLTP&OLAP Main Memory Database System Based on Virtual Memory Snapshots
  • 原文地址:https://www.cnblogs.com/zhangshitong/p/5996568.html
Copyright © 2011-2022 走看看