• '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{

    *****

    }就可以

  • 相关阅读:
    Codechef EDGEST 树套树 树状数组 线段树 LCA 卡常
    BZOJ4319 cerc2008 Suffix reconstruction 字符串 SA
    Codechef STMINCUT S-T Mincut (CodeChef May Challenge 2018) kruskal
    Codeforces 316G3 Good Substrings 字符串 SAM
    Codechef CHSIGN Change the Signs(May Challenge 2018) 动态规划
    BZOJ1396 识别子串 字符串 SAM 线段树
    CodeForces 516C Drazil and Park 线段树
    CodeForces 516B Drazil and Tiles 其他
    CodeForces 516A Drazil and Factorial 动态规划
    SPOJ LCS2
  • 原文地址:https://www.cnblogs.com/zhangshitong/p/5996568.html
Copyright © 2020-2023  润新知