问题描述
这两天在学习这两个框架的整合,问题如下:Hibernate配置文件如下:<hibernate-configuration><session-factory><propertyname="connection.url">jdbc:sqlserver://localhost:1433;databaseName=ManagerDB</property><propertyname="connection.username">sa</property><propertyname="connection.password">000000</property><propertyname="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property><propertyname="dialect">org.hibernate.dialect.SQLServerDialect</property><propertyname="current_session_context_class">thread</property><propertyname="show_sql">true</property><mappingresource="com/web/entity/TabStrule.hbm.xml"/><mappingresource="com/web/entity/TabStudent.hbm.xml"/><mappingresource="com/web/entity/TabSysData.hbm.xml"/><mappingresource="com/web/entity/TabTeaScore.hbm.xml"/></session-factory></hibernate-configuration>
Spring配置文件如下:<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsd"><beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource"><propertyname="driverClassName"value="com.microsoft.sqlserver.jdbc.SQLServerDriver"></property><propertyname="url"value="jdbc:sqlserver://localhost:1433;databaseName=ManagerDB"></property><propertyname="username"value="sa"></property><propertyname="password"value="000000"></property></bean><beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><propertyname="configLocation"value="classpath:hibernate.cfg.xml"></property></bean><beanid="hibernateTemplate"class="org.springframework.orm.hibernate3.HibernateTemplate"><propertyname="sessionFactory"ref="sessionFactory"></property></bean><beanid="studao"class="com.web.dao.TabStudentDAO"><propertyname="hibernateTemplate"ref="hibernateTemplate"></property><propertyname="name"value="ddddddddddddddddd"></property></bean></beans>
这里你要相信我,我确保数据库连接时正确的,如果撤出spring,Hibernate使用是正常的。在这里希望不要回答什么数据库连接错误了,Hibernate配置是否正常,我确信Hibernate配置一切正常。插入数据代码:publicclassTabStudentDAOextendsHibernateDaoSupport{publicTabStudentDAO(){//TODOAuto-generatedconstructorstub}publicvoidsave(TabStudentstu){getHibernateTemplate().save(stu);}}
Servlet中调用:TabStudentstu=newTabStudent();stu.setClassId(1);stu.setCreateTime(newDate());stu.setRemark("");stu.setStuAdd("ddddddd");stu.setStuAge(23);stu.setStuName("hechen");stu.setStuSex("男");stu.setStuTel("15800466429");stu.setExt1("");stu.setExt2("");stu.setExt3("");stuDAO=newTabStudentDAO();stuDAO.save(stu);
问题出现在dao中getHibernateTemplate()方法获得对象总是为null。确保spring容器被加载了。测试如下:WebApplicationContextcontext=WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());SessionFactorysf=(SessionFactory)context.getBean("sessionFactory");if(sf!=null){System.out.println(">>>>>>>>>>>>>>>>>>>>>>");}dao中getHibernateTemplate()方法获得对象总是为null。希望得到正确答案,再次声明不要说什么ssh,这里是spring和Hibernate的整合,与struts无关
解决方案
解决方案二:
换成:<beanid="studao"class="com.web.dao.TabStudentDAO"><propertyname="sessionFactory"><refbean="sessionFactory"/></property><propertyname="name"value="ddddddddddddddddd"></property></bean>
解决方案三:
你的hibernate都配了数据库的连接,你在spring里面又配干嘛?不是多此一举吗?<beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><propertyname="configLocation"value="classpath:hibernate.cfg.xml"></property></bean>直接指向hibernate的配置就行<beanid="hibernateTemplate"class="org.springframework.orm.hibernate3.HibernateTemplate"><propertyname="sessionFactory"ref="sessionFactory"></property></bean>这一句貌似也没有必要配吧?<beanid="studao"class="com.web.dao.TabStudentDAO"><propertyname="sessionFactory"ref="sessionFactory"></property></bean>这句改成sessionFactory就行了试下。看能否解决你滴问题
解决方案四:
你把Hibernate的配置文件配完整!(drivermanager)Spring的配置文件中只需要用<beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><propertyname="configLocation"><value>classpath:hibernate.cfg.xml</value></property></bean>就可以了,
解决方案五:
set注入的实例属性在哪里?这样配hibernateTemplate你是指望hibernateDaoSupport知道模板的改变,可惜这样是不行的,要不dao中加实例属性hibernateDao,并在spring中配,要不改变实现方法,springdao的配置有点太灵活了
解决方案六:
set注入,首先要有这个实例属性
解决方案七:
你那个DAO里配一个hibernateTemplate的一个set方法就可以了,这才是set注入.
解决方案八:
当然还hibernateTemaplate还是那个DAO的一个属性
解决方案九:
<beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><propertyname="dataSource"><refbean="dataSource"/></property><propertyname="mappingResources"><list><value>实体类映射文件</value></list></property>
<beanid="studao"class="com.web.dao.TabStudentDAO"><propertyname="sessionFactory"><refbean="sessionFactory"/></property></bean>
解决方案十:
帮你顶给分不?
解决方案十一:
顶顶顶
解决方案十二:
在DAO里面加上@Resource(name="hibernateTemplate",type=HibernateTemplate.class)privateHibernateTemplatehibernateTemplate;然后再加上getset方法试试
解决方案十三:
先帮顶了!没空这会要外出!