在项目中集成hibernate时,运行Project后提示:

Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required

在applicationContext.xml配置如下:

[html] view plaincopyprint?
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans
  3. xmlns="http://www.springframework.org/schema/beans"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
  6. <import resource="applicatonDBContext.xml" />
  7. <bean id="userDao" class="com.hnyd.demo.hibernate.jdbc.dao.impl.UserDao">
  8. </bean>
  9. </beans>

<?xml version="1.0" encoding="UTF-8"?> <beansxmlns="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"><import resource="applicatonDBContext.xml" /><bean id="userDao" class="com.hnyd.demo.hibernate.jdbc.dao.impl.UserDao"> </bean> </beans>

applicatonDBContext.xml配置如下:

[html] view plaincopyprint?
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee"
  4. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jaxws="http://cxf.apache.org/jaxws"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"
  7. default-lazy-init="false">
  8. <bean id="SystemDataSource"  class="com.mchange.v2.c3p0.ComboPooledDataSource"  destroy-method="close">
  9. <property name="driverClass"                 value="${db.driver}" />
  10. <property name="jdbcUrl"                     value="${db.url}" />
  11. <property name="user"                        value="${db.username}" />
  12. <property name="password"                    value="${db.password}" />
  13. <property name="minPoolSize"                 value="10" />
  14. <property name="maxPoolSize"                 value="20" />
  15. <property name="initialPoolSize"             value="2" />
  16. <property name="maxIdleTime"                 value="1800" />
  17. <property name="acquireIncrement"            value="1" />
  18. <property name="maxStatements"               value="0" />
  19. <property name="idleConnectionTestPeriod"    value="60" />
  20. <property name="acquireRetryAttempts"        value="30" />
  21. <property name="breakAfterAcquireFailure"    value="false" />
  22. <property name="testConnectionOnCheckout"    value="false" />
  23. <property name="testConnectionOnCheckin"     value="true" />
  24. </bean>
  25. <bean id='ConfigurationBean'             class="com.hnyd.demo.hibernate.util.Configuration" >
  26. <property name="location"            value="file:config/config.properties"/>
  27. </bean>
  28. <!-- 创建一个sessionFactory工厂,用于注入hibernate -->
  29. <bean id="sessionFactory"                class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  30. <property name="dataSource"      ref="SystemDataSource"></property>
  31. <property name="hibernateProperties">
  32. <props>
  33. <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
  34. <prop key="hibernate.show_sql">true</prop>
  35. <!-- <prop key="hibernate.hbm2ddl.auto">update</prop> -->
  36. <prop key="hibernate.jdbc.batch_size">20</prop>
  37. </props>
  38. </property>
  39. <property name="mappingResources">
  40. <list>
  41. <value>hbm/User.hbm.xml</value>
  42. </list>
  43. </property>
  44. </bean>
  45. <!-- 创建一个hibernate模板 -->
  46. <bean id="hibernateTemplate"             class="org.springframework.orm.hibernate3.HibernateTemplate">
  47. <property name="sessionFactory">
  48. <ref bean="sessionFactory" />
  49. </property>
  50. </bean>
  51. <bean id="jdbcTemplate"          class="org.springframework.jdbc.core.JdbcTemplate">
  52. <property name="dataSource"      ref="SystemDataSource" />
  53. </bean>
  54. <bean id="sjdbcTemplate"             class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">
  55. <constructor-arg>
  56. <ref bean="SystemDataSource" />
  57. </constructor-arg>
  58. </bean>
  59. </beans>

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee"xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jaxws="http://cxf.apache.org/jaxws"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"default-lazy-init="false"><bean id="SystemDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${db.driver}" /><property name="jdbcUrl" value="${db.url}" /><property name="user" value="${db.username}" /><property name="password" value="${db.password}" /><property name="minPoolSize" value="10" /><property name="maxPoolSize" value="20" /><property name="initialPoolSize" value="2" /><property name="maxIdleTime" value="1800" /><property name="acquireIncrement" value="1" /><property name="maxStatements" value="0" /><property name="idleConnectionTestPeriod" value="60" /><property name="acquireRetryAttempts" value="30" /><property name="breakAfterAcquireFailure" value="false" /><property name="testConnectionOnCheckout" value="false" /><property name="testConnectionOnCheckin" value="true" /></bean><bean id='ConfigurationBean' class="com.hnyd.demo.hibernate.util.Configuration" ><property name="location" value="file:config/config.properties"/></bean><!-- 创建一个sessionFactory工厂,用于注入hibernate --><bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource" ref="SystemDataSource"></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.show_sql">true</prop><!-- <prop key="hibernate.hbm2ddl.auto">update</prop> --><prop key="hibernate.jdbc.batch_size">20</prop></props></property><property name="mappingResources"><list><value>hbm/User.hbm.xml</value></list></property></bean><!-- 创建一个hibernate模板 --><bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"><property name="sessionFactory"><ref bean="sessionFactory" /></property></bean><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="SystemDataSource" /></bean><bean id="sjdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate"><constructor-arg><ref bean="SystemDataSource" /></constructor-arg></bean> </beans>
UserDao.java

[java] view plaincopyprint?
  1. public class UserDao extends HibernateDaoSupport implements IUserDao {
  2. @Override
  3. public void add(User user) {
  4. this.getHibernateTemplate().save(user);
  5. }
  6. @Override
  7. public void delete(int uid) {
  8. User user=new User();
  9. user.setId(uid);
  10. this.getHibernateTemplate().delete(user);
  11. }
  12. @Override
  13. public User findById(int uid) {
  14. return (User)this.getHibernateTemplate().get(User.class,uid);
  15. }
  16. }

public class UserDao extends HibernateDaoSupport implements IUserDao {@Overridepublic void add(User user) {this.getHibernateTemplate().save(user);}@Overridepublic void delete(int uid) {User user=new User();user.setId(uid);this.getHibernateTemplate().delete(user);}@Overridepublic User findById(int uid) {return (User)this.getHibernateTemplate().get(User.class,uid);} }

查找 原因发现HibernateDaoSupport缺少注入SessionFactory,HibernateDaoSupport提供了基于AOP事务的自动处理,程序员完全可以不用理会事务的开始与提交。在JDBC中一个Connection对象使用一个事务,那么在Hibernate中一个事务肯定要关联一个SessionFactory了,然而这个SessionFactory却没有在DAO中体现。其实主要的原因是HibernateDaoSupport类已经默默地做了封装的工作,它用一个setSessionFactory方法将SessionFactory进行注入,所以继承自HibernateDaoSupport类的DAO都会具有SessionFactory的属性,从而可以通过SessionFactory创建Session实例操作数据库。
  在继承HibrnateDaoSupport的DAO实现里,Hibernate Session的管理完全不需要Hibernate代码打开,而由Spring来管理。Spring会根据实际的操作,采用“每次事务打开一次session”的策略,自动提高数据库访问的性能。

因此需要定义一个父类,父类要有一个hibernateTemplate属性,并且注入引用,配置如下:

[html] view plaincopyprint?
  1. <!-- 创建一个dao注入的模板 -->
  2. <bean id="daoTemplate" abstract="true">
  3. <property name="hibernateTemplate">
  4. <ref bean="hibernateTemplate" />
  5. </property>
  6. </bean>

<!-- 创建一个dao注入的模板 --> <bean id="daoTemplate" abstract="true"> <property name="hibernateTemplate"><ref bean="hibernateTemplate" /></property> </bean>
所有使用hibernate的dao都配置为该类的子类,于是applicationContext.xml配置如下:

[html] view plaincopyprint?
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans
  3. xmlns="http://www.springframework.org/schema/beans"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
  6. <import resource="applicatonDBContext.xml" />
  7. <!-- 创建一个dao注入的模板 -->
  8. <bean id="daoTemplate" abstract="true">
  9. <property name="hibernateTemplate">
  10. <ref bean="hibernateTemplate" />
  11. </property>
  12. </bean>
  13. <bean id="userDao" class="com.hnyd.demo.hibernate.jdbc.dao.impl.UserDao" parent="daoTemplate">
  14. </bean>
  15. </beans>

<?xml version="1.0" encoding="UTF-8"?> <beansxmlns="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"><import resource="applicatonDBContext.xml" /><!-- 创建一个dao注入的模板 --><bean id="daoTemplate" abstract="true"><property name="hibernateTemplate"><ref bean="hibernateTemplate" /></property></bean><bean id="userDao" class="com.hnyd.demo.hibernate.jdbc.dao.impl.UserDao" parent="daoTemplate"> </bean> </beans>

经过上面的配置后,就可以正常使用了

在项目中集成hibernate遇到的问题(4)相关推荐

  1. 在Spring项目中集成使用MongoDB

    在Spring项目中集成使用MongoDB 这里使用的是maven工程,所以依赖jar包都是pom.xml配置型式. pom.xml引入依赖 <properties><spring. ...

  2. SpringBoot12 QueryDSL01之QueryDSL介绍、springBoot项目中集成QueryDSL、利用QueryDSL实现单表RUD、新增类初始化逻辑...

    1 QueryDSL介绍 1.1 背景 QueryDSL的诞生解决了HQL查询类型安全方面的缺陷:HQL查询的扩展需要用字符串拼接的方式进行,这往往会导致代码的阅读困难:通过字符串对域类型和属性的不安 ...

  3. maven mybatis mysql_Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问...

    标签: 本篇内容还是建立在上一篇Java Web学习系列--Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Ja ...

  4. uniapp android原生,在uni-app项目中集成Android原生工程

    [TOC] # 在uni-app项目中集成Android原生工程 按照官方的方案,我们如果进行本地打包的话,需要重新创建一个Android原生工程,于是就会导致我们管理多个项目,切来切去的也麻烦. 经 ...

  5. rn项目 假如cocoapods_在项目中集成 RN

    在项目中集成 RN 19 Jan 2017 前言 使用 RN 难道要把整个项目都重构一遍么?教程那么多,但是很少能够有把怎么与当前项目结合起来的文章.自己摸索了一遍,记录下来.之后的 RN 之路就由此 ...

  6. spring 项目中集成 Protocol Buffers 示例

    http://blog.csdn.net/fangzhangsc2006/article/details/8687388 本文适用于了解spring框架,同时想在spring项目中使用Protocol ...

  7. 如何在你的项目中集成 CAP【手把手视频教程】

    前言 之前录制过一期关于CAP的视频,但是由于当时是直播时录制的视频,背景音比较杂所以质量有点差.这次的视频没有直播,直接录制的,视频质量会好很多,第一遍录制完成之后发现播放到一半没有声音,所以又重新 ...

  8. kind富文本编辑器_在项目中集成富文本编辑器

    前   言 现在学程序的都离不开 Markdown 语法了吧,Markdown 已经成为典型的转换为HTML的非正式规范和参考实现,现在市场上也出现了许多Markdown实现,在基本语法之上额外增加了 ...

  9. lerna 项目中集成 babel lint-staged husky eslint

    lerna 项目中集成 babel lint-staged husky eslint Monorepo 是针对单仓库.多 package 的流行解决方案, lerna 是它的一种实现. 说明 重要 p ...

  10. 在网页项目中集成扫码枪设备,实现二维码扫码识别实战

    我寻寻觅觅,寻寻觅觅一个可以二次开发的扫码枪.然而,店小二总是告诉我:"这个--额--额--俺也不知道呢--".本文将一步一步实现在网页项目中集成扫码枪设备. 目录 1.项目背景 ...

最新文章

  1. 新挑战之打造一流能源新材计算平台 2018-10-10
  2. ue4 classuobject没有成员beginplay_给社团新成员准备的教学大纲
  3. 新版本springboot-整合mybatis
  4. 两个iphone怎么大量传照片_外出旅行、出差时,同品牌手机如何实现面对面零流量秒传照片?...
  5. Spring(一)--作用、IOC容器细节、搭配环境、Spring实验
  6. 【转贴】没有div没有float没有clear没有hack的超强CSS布局
  7. Matlab中图像函数大全
  8. 搭建一个wordpress
  9. ai里怎么做阴影效果_使用ai制作出文字阴影效果的详细方法
  10. win7下安装vc6.0(sp5,sp6补丁安装)
  11. 小程序 轮播图样式设置
  12. 基于redis的简易单点登录系统
  13. JavaScript --------WebS APIs学习之网页特效(offset系列)
  14. c语言坐标三角形判断,C语言输入三角形边长判断其类型并输出面积实例代码
  15. 怎么用C++实现点对点通信
  16. C++的游戏--贪吃蛇
  17. java实现word、pdf文件下载功能
  18. LPC1768 UART超时中断的使用
  19. 【东方博宜】【入门】1326--需要安排几位师傅加工零件?
  20. Unity_ClickToShow_FadeInAndOut

热门文章

  1. 胶东机场t1离哪个停车场近,青岛胶东国际机场停车场攻略
  2. python爬虫案例-爬取西刺免费代理服务器IP等信息
  3. png 微软ppt 透明度_工作必备,如何用PPT把logo玩出千种花样?
  4. shoppping collection
  5. excel的VBA编程环境VBE更换错误字体后设置闪退
  6. LeetCode详解C++版
  7. Louvain、Lpa、Infomap算法
  8. Scrapy爬取并分析CSDN热门文章标题
  9. 若依框架(一 运行框架)
  10. vue导出Excel组件