spring4.1.1+hibernate4.3.6问题

问题描述

最近想试试spring4跟hibernate4整合,baseDao继承org.springframework.orm.hibernate4.support.HibernateDaoSupport,baseDao的方法都调用getHibernateTemplate().xxx()实现。奇怪的是前两天增删改查都OK,昨天突然就出问题了,save跟update都报错Writeoperationsarenotallowedinread-onlymode(FlushMode.MANUAL),查询也报错,调用getHibernateTemplate().execute报错说类型转换异常,应该是某个代理类不能转成session类。查了下源代码,确实是这样,查询改成executeWithNativeSession就OK了,save跟update事实上调用的也是这个方法,但是session的创建确有问题,Sessionsession=null;booleanisNew=false;try{session=getSessionFactory().getCurrentSession();}catch(HibernateExceptionex){logger.debug("Couldnotretrievepre-boundHibernatesession",ex);}if(session==null){session=getSessionFactory().openSession();session.setFlushMode(FlushMode.MANUAL);//这里isNew=true;}

而保存操作又需要flushMode不能小于COMMIT,MANUAL是最低的,hibernate3下面的代码是没有的protectedvoidcheckWriteOperationAllowed(Sessionsession)throwsInvalidDataAccessApiUsageException{if(isCheckWriteOperations()&&session.getFlushMode().lessThan(FlushMode.COMMIT)){thrownewInvalidDataAccessApiUsageException("Writeoperationsarenotallowedinread-onlymode(FlushMode.MANUAL):"+"TurnyourSessionintoFlushMode.COMMIT/AUTOorremove'readOnly'markerfromtransactiondefinition.");}}

以前也没遇到这样的问题,关键是TMD的前几天是怎么跑的都搞不明白了,我现在baseDao的save之类的方法改成调用executeWithNativeSession了,回调方法里改flushMode了@Overridepublicvoidsave(Tentity){getHibernateTemplate().executeWithNativeSession(session->{session.setFlushMode(FlushMode.COMMIT);checkWriteOperationAllowed(session);returnsession.save(entity);});}

希望有搞过这个组合的帮忙指点一下是怎么整的,我比较倾向于用hibernateTemplate,实在是没啥分儿,见谅啊

解决方案

解决方案二:
没人鸟我吗没人鸟我吗
解决方案三:
有没有在web层用到OpenSessionInViewFilter?如果用到了是不是现在的某个访问绕过了Filter?
解决方案四:
if(session==null){session=getSessionFactory().openSession();不需要这样的。事务必须配制成required即可。
解决方案五:
引用2楼zhangjihao的回复:

有没有在web层用到OpenSessionInViewFilter?如果用到了是不是现在的某个访问绕过了Filter?

没有用OpenSessionInViewFilter
解决方案六:
引用3楼dyhhello的回复:

if(session==null){session=getSessionFactory().openSession();不需要这样的。事务必须配制成required即可。

上面都是spring的代码,我后来看了,事物根本就没生效,不知道为什么,后来实在折腾不了了换回hibernate3就一切OK了
解决方案七:
我最近也在搭建这个框架,但是session一直注入不了,你是怎么注入进去的。另hibernate4。3.6好像不能用getHibernateTemplate么,只能用hibernate自己的query接口,OpenSessionInViewFilter配置sessionfactory也会出错。。。
解决方案八:
谢谢了,各位大神
解决方案九:
引用6楼u011221339的回复:

我最近也在搭建这个框架,但是session一直注入不了,你是怎么注入进去的。另hibernate4。3.6好像不能用getHibernateTemplate么,只能用hibernate自己的query接口,OpenSessionInViewFilter配置sessionfactory也会出错。。。

注入要么用xml配置,要么用注解,我喜欢用注解,自己写个类继承hibernateDaoSupport类,然后在自己这个类里面写个带注解的set方法,看一下我这篇博客
解决方案十:
引用8楼tsingheng的回复:

Quote: 引用6楼u011221339的回复:
我最近也在搭建这个框架,但是session一直注入不了,你是怎么注入进去的。另hibernate4。3.6好像不能用getHibernateTemplate么,只能用hibernate自己的query接口,OpenSessionInViewFilter配置sessionfactory也会出错。。。

注入要么用xml配置,要么用注解,我喜欢用注解,自己写个类继承hibernateDaoSupport类,然后在自己这个类里面写个带注解的set方法,看一下我这篇博客

hibernate4.3没有getHibernateTemplate这个接口了,session接口变化很大

时间: 2024-09-24 11:55:57

spring4.1.1+hibernate4.3.6问题的相关文章

struts2.3.24+spring4.1.6+hibernate4.3.11+mysql5.5.25开发环境搭建图文教程_java

struts2.3.24 + spring4.1.6 + hibernate4.3.11+ mysql5.5.25开发环境搭建及相关说明. 一.目标 1.搭建传统的ssh开发环境,并成功运行(插入.查询) 2.了解c3p0连接池相关配置 3.了解验证hibernate的二级缓存,并验证 4.了解spring事物配置,并验证 5.了解spring的IOC(依赖注入),将struts2的action对象(bean)交给spring管理,自定义bean等...并验证 6.了解spring aop(面向

spring mvc4.1.6 spring4.1.6 hibernate4.3.11 mysql5.5.25开发环境搭建图文教程_java

一.准备工作开始之前,先参考上一篇:  struts2.3.24 + spring4.1.6 + hibernate4.3.11 + mysql5.5.25 开发环境搭建及相关说明 思路都是一样的,只不过把struts2替换成了spring mvc  二.不同的地方工程目录及jar包:  action包改成controller:  删除struts2 jar包,添加spring mvc包(已有的话,不需添加):     web.xml配置:  跟之前不同的地方是把struts2的过滤器替换成了一

spring4.0.2+hibernate4.3.5+struts2.3.16.1+c3p0集成SSH入门精简official

之前写过一篇类似的文章,现在回过头来看很糟糕. 很多人在第一次大框架的时候感到很迷茫,包括本人.尤其是jar包的问题,那么多,到底哪些该加,哪些不该加.网上虽然有很多教程和文章,但都是把一堆jar包垒上,然后给出一个demo.诺,照这样做,框架就搭好了.看,我还加了cglib,aspectj呢. 其实,新手应该从搭一个SSH的最小系统开始,以后熟练了,再玩点高大上的,用aspectj,cglib之类的. 什么是最小系统? 计算机或计算机相关专业都学过单片机,单片机有个最小系统,它由三个部分组成:

JEECMS v8 发布,Java 开源 CMS 系统

JEECMSv8 是国内Java开源CMS行业知名度最高.用户量最大的站群管理系统,支持栏目模型.内容模型交叉自定义.以及具备支付和财务结算的内容电商为一体: 对于不懂技术的用户来说,只要通过后台的简单设置即可自定义出集新闻管理.图库管理.视频管理.下载系统.文库管理.政务公开.作品管理.产品发布.供求信息.房屋租售.招聘信息.网络问卷调查及留言板于一体的综合性且不失个性化门户网站. 对于技术达人来说,JEECMS不仅提供全部源码,而且在研发之初即全面的考虑了二次开发的高效性和代码的高移植性,是

spring4.14+hibernate4.3整合,web运行正常,junit测试报错;

问题描述 spring4.14+hibernate4.3整合,web运行正常,junit测试报错: 之前web启动的时候也报这个错误,然后在web.xml里面加了这个filter,就好了. 可是现在用junit测试,没办法读取web.xml里面的配置,所以还报了这个错, 别问我为什么要junit测试,就是想知道 junit测试的时候这种情况怎么解决. 下面附代码 SpringOpenSessionInViewFilterorg.springframework.orm.hibernate4.sup

Spring3+Hibernate3升级为Spring4+Hibernate4

写在开始 今天,把当前项目做了一下升级,特此记录一下. 由于历史原因,项目本身并不是Maven项目,所以升级JAR包都是手动从Maven库中下载,然后load进项目lib. 目前 spring版本已经更新至5,但是4还是主流版本. 相比spring3,spring4新特性如下: Spring4新特性--泛型限定式依赖注入 Spring4新特性--核心容器的其他改进 Spring4新特性--Web开发的增强 Spring4新特性--集成Bean Validation 1.1(JSR-349)到Sp

ssh-Struts2.3.16.1+Hibernate4.3.5+Spring4.0.4 框架整合

问题描述 Struts2.3.16.1+Hibernate4.3.5+Spring4.0.4 框架整合 公司要做项目,要求都用最新的.所以在网上把最新的jar包都下载下来了.可是不知道如何把这些jar包整合到项目中.我现在的做法是按照http://wenku.baidu.com/link?url=EJKhvOXEiRSnj7EVPak-K2AgajBpiSo5MDTuliTZWo66et-XhpGrRkgp18iwBRlipnSYKpFlihV-hurulwNnwyKd4F70BSXcLtcpV

spring4整合hibernate5.1

在另一篇文章hibernate5(2)初入门配置实例中,我们针对hibernate5.1版本的崭新引导配置方法,完成了对数据库的的插入实例操作,在本节内容中,我们开始引入spring4,完成spring4与hibernate5.1的整合工作,像数据库中插入一条记录.在后面学习hibernate中,我们都会使用spring来管理我们的Bean容器. 1. 导入spring4所需jar包 我们推荐使用maven来管理项目,下面是maven中的spring整合hibernate完整配置. <prope

spring mvc-在springmvc+hibernate4整合,sessionfactory空指针

问题描述 在springmvc+hibernate4整合,sessionfactory空指针 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in URL [file:/F:/apache-tomcat-7.0.57/webapps/MerchantService/WEB-INF/classes/config/beans.