博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hibernate4与spring3的整合,不兼容
阅读量:7295 次
发布时间:2019-06-30

本文共 2095 字,大约阅读时间需要 6 分钟。

hot3.png

双休整合下

整合struts2+spring3.2.1+hibernate4.2.1

结果遇到问题如下问题:

java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session;	at org.springframework.orm.hibernate3.SessionFactoryUtils.doGetSession(SessionFactoryUtils.java:323)	at org.springframework.orm.hibernate3.SessionFactoryUtils.getSession(SessionFactoryUtils.java:235)	at org.springframework.orm.hibernate3.HibernateTemplate.getSession(HibernateTemplate.java:457)	at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:392)	at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)	at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:683)

检查配置文件,没有哪个地方用的hibernate3呀。

开始怀疑spring3,我用的是spring3提供的hibernateTemplate,怀疑hibernateTemplate用到的是hibernate3的方法。网上搜索,果然。

下面是他人的分析:“找不到方法,而我肯定导入了hibernate的jar包了,在网上搜索相关的文章,有人说这是在整合ssh时常出现的错误,主要指版本间的不兼容,我想这两个框架我都使用的是最新版本啊,怎么会不兼容呢。然后去spring的jar包里面看了一下才知道系统默认的使用的是.hibernate3.SessionFactoryUtils.doGetSession,而我使用的是hibernate4,那么原因肯定就在这里了,但是为什么在相同路径下就有.hibernate4.SessionFactoryUtils.doGetSession这个为什么不调用呢?”

上网查了一下,主要原因是spring认为hibernate4的代码写的足够好了,不用自己再写一个支持类了。所以就建议使用hibernate4的hibernateDAO了。

参考 

文章给出了hibernate3与hibernate4的区别,没有给出具体的解决办法,我等下解决了再贴上来~

-------------------------------我是改进的分割线--------------------------------

原本在DAO中将sessionFactory注入给HibernateTemplate,现在直接将sessionFactory注入给SessionFactory。然后用sessionFactory执行CRUD操作。代码如下:

在DAO中获取sessionFactory

private SessionFactory sessionFactory;@Resource(name="sessionFactory")public void setSessionFactory(SessionFactory sessionFactory) {     this.sessionFactory = sessionFactory;}

通过sessionFactory执行CRUD

Session session = sessionFactory.openSession();session.beginTransaction();session.save( new Event( "Our very first event!", new Date() ) );session.save( new Event( "A follow up event", new Date() ) );session.getTransaction().commit();session.close();
这样的改进只是通过spring将sessionFactory注入到DAO中,没有用到spring对hibernate的封装。代码比hibernateTemplate麻烦多啦!我再继续找找如何更好的整合。

转载于:https://my.oschina.net/suyewanwan/blog/114244

你可能感兴趣的文章
SSM框架搭建总结(2)
查看>>
Python学习(19)正则表达式
查看>>
PHP中空字符串、0、null、empty和false之间的关系
查看>>
【深度学习篇】---CNN和RNN结合与对比,实例讲解
查看>>
201771010126 王燕《面向对象程序设计(Java)》第十二周学习总结
查看>>
XAML实例教程系列 - 资源(Resources)
查看>>
LWIP互联网资料汇总
查看>>
外贸术语
查看>>
网络传输流量控制策略小结
查看>>
上传大文件
查看>>
Mybatis面试集合(转)
查看>>
分布式系统的完整介绍(一)
查看>>
考点1
查看>>
Asp.net 程序连接orcle如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,...
查看>>
自己写的模板引擎,模板生成静态页面
查看>>
Android 数据库管理— — —更新数据
查看>>
014_捆绑包与显示模式
查看>>
python : logging模块format类
查看>>
[LeetCode] Two Sum
查看>>
java类中的初始化顺序
查看>>