配置:spring 2.1,hibernate 3.2
我用spring的配置文件想获取一个hibernatedaosupport类型的bean,但是总是提示nullpointerexception,程序跟踪后发现hibernatetemplate 竟然是null的。然后我想用spring获取LocalSessionFactoryBean,又提示转换失败,我用spring获取其他的bean是正常,这到底是什么回事。
spring配置如下:
<beans>
<bean id="SybDataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>com.sybase.jdbc3.jdbc.SybDataSource</value>
</property>
<property name="url">
<value>jdbc:sybase:Tds:132.119.32.102:5000/ss7info?charset=eucgb&amp;JCONNECT_VERSION=0
</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value>***</value>
</property>
<property name="maxActive"><value>8</value></property>
<property name="maxIdle"><value>4</value></property>
<property name="maxWait"><value>30</value></property>

</bean>
<bean id="HibSessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="SybDataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect"> org.hibernate.dialect.SybaseDialect </prop>
<prop key="showSQL">false</prop>
</props>
</property>

</bean>
<bean id="BasicDAO" class="com.test.ss7info.dao.BasicDAO">
<property name="sessionFactory"><ref local="HibSessionFactory"></ref></property>
</bean>

</beans>

解决方案 »

  1.   

    可能是包没有导完全的原因,导致dataSource没有初始化成功,是否导入了spring中有关dbcp相关的第三方的jar包,我记得应该是有一个pool的包.
      

  2.   

    谢谢ls的关注。但是dbcp和driver都已经导入了,而且我试过获取datasource都是可用的,就是不知道为什么hibernatetemplate 是空的。
      

  3.   

    你换一种用法试试,把配置信息写到hibernate.cfg.xml中。代码似乎没问题啊!
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="configLocation">
    <value>classpath:/com/.../hibernate.cfg.xml</value>
    </property>
    </bean>
      

  4.   

    你的问题已经找到原因了
    原因是你的hibernateTemplate没有在配置文件中指明,并且dao应该依赖于HibernateTemplate
    加入如下的代码试试<bean id="netHibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
    <property name="sessionFactory">
    <ref local="HibSessionFactory">
    </ref></property>
    </bean><bean id="BasicDAO" class="com.test.ss7info.dao.BasicDAO">
    <property name="hibernateTemplate">
                     <ref local="netHibernateTemplate"></ref>
    </property>
    </bean>
      

  5.   

    谢谢各位的帮助。但是我还是没搞定啊。
    to feihua317(光光):试过了,问题依旧。我尝试获取LocalSessionFactoryBean出现classcastexception。根据spring的reference,两种方法都是可以的。以前我把hibernate configuration 配置在spring configuration中,是可行的,就是不知道为什么今天会这样。
    to sophia_230() :hibernatetemplate是由hibernatedaosupport创建的,只要传递其正确的sessionfactory,现在的问题就是创建不了sessionfactory。为什么localsessionfactorybean会创建失败呢!!
      

  6.   

    你的实体配置文件怎么没有?XXX.hbm.xml
    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref bean="dataSource" />
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.MySQLDialect
    </prop>
    <prop key="hibernate.show_sql">true</prop>
    </props>
    </property>
    <property name="mappingResources">
    <list>
    <value>com/xzwx/project1/pojo/User.hbm.xml</value>
    </list>
    </property>
    </bean>
      

  7.   

    LZ用的是什么容器环境?如果是tomcat的话,你看看是不是在tomcat的lib目录下和你应用程序的WEB-INF/lib目录下都放置了spring的jar包?如果都存在的话删除掉其中一个目录中的spring的jar包.
      

  8.   

    HibernateTemplate是spring的orm包里面的吧,我不是很清楚这个东东,好像是这样的