`

sessionFactory or hibernateTemplate is required的解决办法【转】

阅读更多

今天自己在applicationXXX.xml配置文件中注入了一个实例,部署后重启tomcat时候抛错了,错误正是标题。我研究了好久,因为是参照之前注入成功的实例去注入的,怎么就出问题了呢?后来在网上查到,是因为我这个实例比较特殊:MemberDaoImpl extends HibernateDaoSupport implements MemberDao

就是因为集成了HibernateDaoSupport 这个,凡事继承这个的,都要在注入文件里面添加:<property name="sessionFactory" ref="sessionFactory"></property>

完整的部分是: <bean id="memberDao" class="cn.payeasy.user.service.impl.MemberDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

 

以下是网上的:

Java代码 复制代码
  1. <bean id="userDAO" class="org.bookstore.dao.impl.UserDAO">   
  2.      <property name="sessionFactory" ref="sessionFactory"></property>   
  3. </bean>   
  4. <bean id="userService" class="org.bookstore.service.impl.UserService">   
  5.      <property name="userDAO">   
  6.          <ref bean="userDAO"/>   
  7.      </property>   
  8. </bean>  
<bean id="userDAO" class="org.bookstore.dao.impl.UserDAO">
  <property name="sessionFactory" ref="sessionFactory"></property>
 </bean>
 <bean id="userService" class="org.bookstore.service.impl.UserService">
  <property name="userDAO">
   <ref bean="userDAO"/>
  </property>
 </bean>

 

 

Java代码 复制代码
  1. public class UserDAO extends HibernateDaoSupport implements IUserDAO {   
  2.        
  3.     public void saveUser(User user) {   
  4.   
  5.          ......   
  6.      }   
  7.   
  8. }  
public class UserDAO extends HibernateDaoSupport implements IUserDAO {
 
 public void saveUser(User user) {

  ......
 }

}

修改后如下:

Java代码 复制代码
  1. <bean id="userDAO" class="org.bookstore.dao.impl.UserDAO">   
  2.          <property name="sessionFactory" ref="sessionFactory"></property>   
  3.      </bean>   
  4.      <bean id="userService" class="org.bookstore.service.impl.UserService">   
  5.          <property name="userDAO">   
  6.              <ref bean="userDAO"/>   
  7.          </property>   
  8.          <property name="sessionFactory" ref="sessionFactory"></property>   
  9.      </bean>  
<bean id="userDAO" class="org.bookstore.dao.impl.UserDAO">
  <property name="sessionFactory" ref="sessionFactory"></property>
 </bean>
 <bean id="userService" class="org.bookstore.service.impl.UserService">
  <property name="userDAO">
   <ref bean="userDAO"/>
  </property>
  <property name="sessionFactory" ref="sessionFactory"></property>
 </bean>

原因:

我的org.bookstore.dao.impl.UserDAO继承了org.springframework.orm.hibernate3.support.HibernateDaoSupport, spring在初始化容器的时候会对这个对象作一个check, 看下HibernateDaoSupport源码中的checkDaoConfig()方法就清楚啦:

Java代码 复制代码
  1. protected final void checkDaoConfig() {      
  2.         if (this.hibernateTemplate == null) {      
  3.             throw new IllegalArgumentException("'sessionFactory' or 'hibernateTemplate' is required");      
  4.          }      
  5.      }    
Java代码 复制代码
  1. protected final void checkDaoConfig() {      
  2.         if (this.hibernateTemplate == null) {      
  3.             throw new IllegalArgumentException("'sessionFactory' or 'hibernateTemplate' is required");      
  4.          }      
  5.      }    
protected final void checkDaoConfig() {   
        if (this.hibernateTemplate == null) {   
            throw new IllegalArgumentException("'sessionFactory' or 'hibernateTemplate' is required");   
        }   
    }


所以,在com.lfw.sh.manager.impl.UserManageImpl对象一定要注入一个sessionFactory or hibernateTemplate对象。

 

Java代码 复制代码
  1. <bean id="sessionFactory"  
  2.         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">   
  3.          <property name="dataSource">   
  4.              <ref bean="dataSource" />   
  5.          </property>   
  6.          <property name="hibernateProperties">   
  7.              <props>   
  8.                  <prop key="hibernate.dialect">   
  9.                      org.hibernate.dialect.MySQLDialect   
  10.                  </prop>   
  11.              </props>   
  12.          </property>   
  13.          <property name="mappingResources">   
  14.              <list>   
  15.                  <value>org/bookstore/model/User.hbm.xml</value>   
  16.                  ....   
  17.              </list>   
  18.          </property>   
  19.      </bean>  

 

分享到:
评论
3 楼 jiangao_01 2011-11-16  
3q
2 楼 ml365 2011-10-08  
gwl3323405 写道
谢谢LZ,帮我很快解决了问题。

呵呵,大家互相交流
1 楼 gwl3323405 2011-10-03  
谢谢LZ,帮我很快解决了问题。

相关推荐

    一个模拟Spring将SessionFactory注入到HibernateTemplate的小例子

    本示例将深入探讨如何使用Spring将SessionFactory注入到HibernateTemplate中,从而实现数据库操作的便捷管理。 首先,让我们了解几个关键组件: 1. SessionFactory:这是Hibernate的核心工厂类,用于创建Session...

    HibernateTemplate 的常规用法.doc

    hibernateTemplate = new HibernateTemplate(sessionFactory); } return hibernateTemplate; } public List&lt;Person&gt; getPersons() { return getHibernateTemplate().find("from Person"); } public Person...

    hibernateTemplate

    hibernateTemplate = new HibernateTemplate(sessionFactory); } return hibernateTemplate; } // 查询所有Person实例 public List&lt;Person&gt; getPersons() { return getHibernateTemplate().find("from ...

    HibernateTemplate的用法总结

    hibernateTemplate = new HibernateTemplate(sessionFactory); } return hibernateTemplate; } // 查询所有Person public List&lt;Person&gt; getPersons() { // 使用HibernateTemplate查询所有Person return ...

    HibernateTemplate源代码

    throw new InvalidDataAccessApiUsageException("SessionFactory required for HibernateTemplate"); } // 获取当前会话 Session session = sessionFactory.getCurrentSession(); // 设置会话配置 ...

    HibernateTemplate的方法使用

    - 在这种方式下,我们直接使用 DataSource 来创建 SessionFactory,并从 SessionFactory 创建 HibernateTemplate。 3. **直接获取并使用**: - 这种方式较为简单,直接通过现有的 SessionFactory 获取 ...

    HibernateTemplate详细描述以及使用范围

    HibernateTemplate hibernateTemplate = new HibernateTemplate(sessionFactory, true); ``` #### 四、SessionFactory的作用 `SessionFactory`是Hibernate的核心工厂类,负责创建`Session`对象,同时也是线程...

    关于使用HibernateTemplate

    &lt;property name="sessionFactory" ref="sessionFactory"/&gt; ``` - **使用**:在需要进行事务管理的方法上添加`@Transactional`注解即可,例如: ```java @Service @Transactional public class ...

    Spring_Spring_Hibernate_HibernateTemplate

    - 创建HibernateTemplate实例:使用SessionFactory创建HibernateTemplate,通常通过`setSessionFactory()`方法注入SessionFactory。 - 编写业务逻辑:调用HibernateTemplate提供的方法,如`save()`, `update()`, `...

    SSH2增删改查使用HibernateTemplate

    DataSource用于连接数据库,SessionFactory是Hibernate的核心接口,而HibernateTemplate则是Spring对SessionFactory的封装,提供了一种模板方法模式来执行常见的Hibernate操作。 ```xml &lt;!-- 数据库连接配置 --&gt; ...

    使用 HibernateSessionFactory 类

    在Java的持久化框架Hibernate中,`SessionFactory`是核心组件之一,它负责管理数据库会话并提供对象-关系映射(ORM)的功能。本篇文章将深入探讨`SessionFactory`的使用,以及如何创建和操作它。 `SessionFactory`...

    HibernateSessionFactory.java

    HibernateSessionFactory.java

    hibernateDaoSurpport和hibernateTemplate

    通过这种方式,开发者可以在继承`HibernateDaoSupport`的DAO实现类中直接调用`HibernateTemplate`的方法,而无需显式创建`SessionFactory`和`HibernateTemplate`。 #### 四、比较分析 - **使用场景**:`...

    对hibernate的封装 HibernateTemplate

    在使用HibernateTemplate之前,需要配置SessionFactory,并将其注入到HibernateTemplate实例中。以下是一个简单的例子: ```java @Autowired private HibernateTemplate hibernateTemplate; public void saveUser...

    HibernateTemplate类的使用

    ### HibernateTemplate类的使用详解 #### 一、引言 在Java开发中,持久层框架Hibernate因其优秀的ORM(Object-Relational Mapping)特性被广泛应用。为了更便捷地使用Hibernate,Spring框架提供了一系列工具类来简化...

    HibernateSessionFactory 代码

    本篇文章将深入探讨`HibernateSessionFactory`及其在Hibernate中的作用,以及如何使用它来实现增、删、查、改(CRUD)操作。 `SessionFactory`是Hibernate的核心组件,它是线程安全的,负责管理数据库连接和会话。`...

    hibernate中的SessionFactory

    hibernate中的SessionFactoryhibernate中的SessionFactoryhibernate中的SessionFactory

    hibernate模拟hibernatetemplate

    在Spring 3.x版本之后,HibernateTemplate被HibernateOperations接口和SessionFactory取代,但在之前的版本中,它是非常流行的一种选择。 **一、HibernateTemplate介绍** HibernateTemplate是Spring对Hibernate的一...

    基于HIbernateTemplate的代码自动生成

    它是Spring对Hibernate提供的一个抽象层,它提供了一组模板方法,使得开发者可以更方便地进行持久化操作,如保存、更新、删除和查询等,而无需直接与`Session`或`SessionFactory`打交道。`HibernateTemplate`内部...

    spring配置sessionFactory(spring3.2.3+hibernate4.2.2)

    本文将详细讲解如何在Spring 3.2.3版本中配置SessionFactory,以便整合Hibernate 4.2.2,实现对数据库操作的高效管理。SessionFactory是Hibernate的核心组件,它负责创建Session对象,而Session则是与数据库交互的...

Global site tag (gtag.js) - Google Analytics