这两天在学习这两个框架的整合,问题如下:Hibernate 配置文件如下:
<hibernate-configuration>
<session-factory>
<property name="connection.url">
jdbc:sqlserver://localhost:1433;databaseName=ManagerDB
</property>
<property name="connection.username">sa</property>
<property name="connection.password">000000</property>
<property name="connection.driver_class">
com.microsoft.sqlserver.jdbc.SQLServerDriver
</property>
<property name="dialect">
org.hibernate.dialect.SQLServerDialect
</property>
<property name="current_session_context_class">thread</property>
<property name="show_sql">true</property>
<mapping resource="com/web/entity/TabStrule.hbm.xml" />
<mapping resource="com/web/entity/TabStudent.hbm.xml" />
<mapping resource="com/web/entity/TabSysData.hbm.xml" />
<mapping resource="com/web/entity/TabTeaScore.hbm.xml" />
</session-factory>
</hibernate-configuration>Spring 配置文件如下:<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.microsoft.sqlserver.jdbc.SQLServerDriver">
</property>
<property name="url"
value="jdbc:sqlserver://localhost:1433;databaseName=ManagerDB">
</property>
<property name="username" value="sa"></property>
<property name="password" value="000000"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="studao" class="com.web.dao.TabStudentDAO">
<property name="hibernateTemplate" ref="hibernateTemplate"></property>
<property name="name" value="ddddddddddddddddd"></property>
</bean>
</beans>这里你要相信我,我确保数据库连接时正确的,如果撤出spring,Hibernate 使用是正常的。在这里希望不要回答什么数据库连接错误了,Hibernate 配置是否正常,我确信Hibernate 配置一切正常。插入数据代码:public class TabStudentDAO  extends HibernateDaoSupport{ public TabStudentDAO() {
// TODO Auto-generated constructor stub
}

public void save(TabStudent stu){
getHibernateTemplate().save(stu);
}
}Servlet 中调用:TabStudent stu=new TabStudent();
stu.setClassId(1);
stu.setCreateTime(new Date());
stu.setRe("");
stu.setStuAdd("ddddddd");
stu.setStuAge(23);
stu.setStuName("hechen");
stu.setStuSex("男");
stu.setStuTel("15800466429");
stu.setExt1("");
stu.setExt2("");
stu.setExt3("");
stuDAO=new TabStudentDAO();
stuDAO.save(stu);
问题出现在 dao 中 getHibernateTemplate() 方法获得对象总是为 null。 确保spring 容器被加载了。
测试如下:
WebApplicationContext context=WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
SessionFactory sf= (SessionFactory)context.getBean("sessionFactory");
if(sf!=null){
System.out.println(">>>>>>>>>>>>>>>>>>>>>>");
}dao 中 getHibernateTemplate() 方法获得对象总是为 null。  希望得到正确答案,再次声明 不要说什么ssh,这里是spring 和 Hibernate 的整合,与struts无关

解决方案 »

  1.   

    换成:    <bean id="studao" class="com.web.dao.TabStudentDAO">
            <property name="sessionFactory">
                 <ref bean="sessionFactory"/>
            </property>
            <property name="name" value="ddddddddddddddddd"></property>
        </bean>
      

  2.   

    你的hibernate 都配了 数据库的连接  , 你在 spring 里面又 配干嘛? 不是多此一举吗?<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="configLocation"
    value="classpath:hibernate.cfg.xml">
    </property>
    </bean>直接指向  hibernate 的配置就行<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
            <property name="sessionFactory" ref="sessionFactory"></property>
        </bean>  这一句貌似 也没有必要配吧?
    <bean id="studao" class="com.web.dao.TabStudentDAO">
            <property name="sessionFactory" ref="sessionFactory"></property>
        </bean>  这句  改成  sessionFactory 就行了   
      试下。 看能否解决你滴问题
      

  3.   

    你把Hibernate的配置文件配完整!(driver manager)Spring 的配置文件中只需要用
     <bean id="sessionFactory"  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="configLocation"> <value>classpath:hibernate.cfg.xml</value>
    </property>
    </bean>
    就可以了,
      

  4.   

    set注入的实例属性在哪里?这样配hibernateTemplate你是指望hibernateDaoSupport知道模板的改变,可惜这样是不行的,要不dao中加实例属性hibernateDao,并在spring中配,要不改变实现方法,spring
    dao的配置有点太灵活了
      

  5.   

    set注入,首先要有这个实例属性
      

  6.   

    你那个DAO里配一个hibernateTemplate的一个set方法就可以了,这才是set注入.
      

  7.   

    当然还hibernateTemaplate还是那个DAO 的一个属性
      

  8.   

    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref bean="dataSource" />
    </property>
    <property name="mappingResources">
    <list>
    <value>实体类映射文件</value>

    </list>
    </property><bean id="studao" class="com.web.dao.TabStudentDAO">
            <property name="sessionFactory">
                 <ref bean="sessionFactory"/>
            </property>
        </bean>
      

  9.   

    在DAO里面加上
    @Resource(name = "hibernateTemplate", type = HibernateTemplate.class)
        private HibernateTemplate hibernateTemplate;
    然后再加上get set方法试试