第一种情况:
public class BaseDao<T> extends HibernateDaoSupport{}tomcat 报错
Caused by: java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
at org.springframework.orm.hibernate3.support.HibernateDaoSupport.checkDaoConfig(HibernateDaoSupport.java:118)
at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:44)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1469)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409)
... 21 more估计就是sessionFactory 没注入进去第二种情况:
public class BaseDao<T> 
         @Autowired
protected SessionFactory sessionFactory; public void setSessionFactory(final SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}         /**
 * 取得sessionFactory.
 */
          public Session getSession() {
 return sessionFactory.getCurrentSession(); }           如果用这种获得Session        tomcat报错如下:
          Exception in thread "main" org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
          如果用  这种
           public Session getSession() {
 return sessionFactory.getOpenSession(); }
          tomcat就好了,不报错,项目也能运行成功,但是每次都没关闭session,用起来也蛮麻烦的
          我想用 HibernateDaoSupport 里面的方法获得session 用习惯了 而且开发也方便 ,
          请问到底该怎么配置啊!!!
  

解决方案 »

  1.   

    配置了吗?
        <bean id="transactionManager"
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
        </bean>
      

  2.   


    <bean id="dataSource"
              class="org.apache.commons.dbcp.BasicDataSource"
              destroy-method="close" >
            <property name="driverClassName">
                   <value>oracle.jdbc.driver.OracleDriver</value>
            </property><bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            <property name="dataSource">
                <ref bean="dataSource"/>
            </property>
      

  3.   

    <aop:aspectj-autoproxy proxy-target-class="true"/>
    <aop:config proxy-target-class="true">
    <aop:advisor
    pointcut="execution(* com.xxxxx..*Service.*(..))"
    advice-ref="txAdvice" />
    </aop:config><bean id="transactionManager"
      class="org.springframework.orm.hibernate3.HibernateTransactionManager">
      <property name="sessionFactory" ref="sessionFactory" />
      </bean>这些有吗?
      

  4.   

    如果用sessionFactory.getCurrentSession();
    你要在hibernate的配置文件里配置:
    <property name="current_session_context_class">thread</property>
    告诉hibernate把session绑定到thread上
      

  5.   

    解决方案如下 <servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> <init-param> 
    <param-name>debug</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>classes</param-name> <param-value>java.lang.Object</param-value> </init-param> </servlet> 
      

  6.   

    hibernate的数据库连接配置需要在配置文件中手动配置,注解只能配置自定义的类关联。本人项目中的BaseDao<T>这样实现的:public class BaseDao<T> implements IBaseDao<T> extends HibernateDaoSupport
    {
       private HibernateTemplate hibernateTemplate;
           ...get()/set()...
       public void save(T t)
         {
             this.HibernateTemplate.save(t);
           }
    }在配置文件配置好sessionFactory等。
      

  7.   

    @Autowired用了这个你要在spring里导入它的引用
      

  8.   

    用了注解的话,还是需要spring的注入的
      

  9.   

    呵呵,配置文件不对。看一下我配的
    <bean id="dataSource"
              class="org.apache.commons.dbcp.BasicDataSource"
              destroy-method="close" >
            <property name="driverClassName">
                   <value>oracle.jdbc.driver.OracleDriver</value>
            </property><bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            <property name="dataSource">
                <ref bean="dataSource"/>
            </property>
      

  10.   

    LZ你在类头上加个spring的注解看看,或者在spring文件里人手写注入
    既然继承了类HibernateDaoSupport就不
    需要再写 @Autowired
    protected SessionFactory sessionFactory;
      

  11.   

    <tx:annotation-driven /><bean id="transactionManager"
      class="org.springframework.orm.hibernate3.HibernateTransactionManager">
      <property name="sessionFactory" ref="sessionFactory" />
    </bean>在方法上加上  @Transactional