spring+springmvc+hibernate整合遇到的问题
spring+springmvc+hibernate整合遇到的问题
2016年10月20日 23:24:03 守望dfdfdf 阅读数:702 标签: ssh学习经历的异常exception异常框架更多
个人分类: 工作 问题
编辑
版权声明:本文为博主原创文章,转载请注明文章链接。 https://blog.csdn.net/xiaoanzi123/article/details/52878325
★hibernate 整合 spring ,dao层注入为空,空指针异常,service层的注入没问题,
检查发现
application.xml里面没有添加对 dao包的扫描, <context:component-scan base-package="org.drill.dao" /> 。
seviceImpl里面注入dao用autowired就不要再写 get set方法了。
其实主要原因就是没扫dao包,因为dao包是自己后来才写的添加的,【配置文件是别人给的,要求不能改动, = =!】
对hibernate的原理也不明白,主要不明白dao包里面怎么写,当时也考虑到添加扫描dao包,也尝试了添加对
dao包的扫描,但是当时还是出错了【注解注入上的错】,所以就没再考虑这个因素。
★现在的问题是,项目能启动,出现以下异常:
Servlet.service() for servlet [rest] in context with path [/drillApi] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException:Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.] with root cause
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
at org.springframework.orm.hibernate4.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1135)
在网上找的解决方案:web.xml中配置的OpenSessionInViewFilter这个过滤器的时候,FlushMode就已经被默认设置为了MANUAL!
如果FlushMode是MANUAL或NEVEL,在操作过程中 hibernate会将事务设置为readonly,所以在增加、删除或修改操作过程中会出现如下错误:
org.springframework.dao.InvalidDataAccessApiUsageException:
Write operations are not allowed in read-only mode (FlushMode.NEVER) turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition;
解决办法1:直接修改OpenSessionInViewFilter过滤器的配置,配置过滤器的时候配置就是在一般的配置里面加上下面
<init-param>
<param-name>flushMode</param-name>
<param-value>AUTO</param-value>
</init-param>
如下:
下面是配置文件:(web.xml)
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>flushMode</param-name>
<param-value>AUTO</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
但是还是不行,此时dao包里只直接写了一个类,如下
/*@Repository
public class BsxrDaoImpl extends HibernateDaoSupport {
@Autowired
public void setSessionFactoryOverride(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
}
public void saveFindMess(FindMess fin) {
this.getHibernateTemplate().save(fin);
}
}*/
在前辈指导建议下,将dao层按照标准写法写了两个接口和一个实现类之后,上面的异常没有了,但是出现无法注入service的异常,
将配置文件中的对service的注入
<context:component-scan base-package="org.drill.service" />
更改为
<context:component-scan base-package="org.drill.service,org.drill.service.impl" /> ,异常解决。
这里要强调一下:以后service和serviceImpl 写在一个包里,service和serviceImpl 所在的包是service所在包的子包!!!
此时,项目正常启动,浏览器链接访问:出现:
异常:Could not obtain transaction-synchronized Session for current thread
可见是事务上的问题,添加@Transactional到serviecimpl中的@service下面,项目正常启动,浏览器链接访问:
还是异常:Could not obtain transaction-synchronized Session for current thread
之后在http://stackoverflow.com/questions/26203446/spring-hibernate-could-not-obtain-transaction-synchronized-session-for-current
发现解决方案:在daoImpl中的@Repository下面添加
@Transactional
@EnableTransactionManagement 之后所有问题解决。
但是事务是要配置在service层的,这只是权宜之计,事务相关的配置此时是写在spring-hibernate.xml中的,这里我把它转移到
application.xml里面,把daoImpl中
@Transactional
@EnableTransactionManagement 放到serviceImpl中,一切可以运行。
【说好的不让改配置文件呢???】
异常:Could not obtain transaction-synchronized Session for current thread主要是因为没有配置启用注解式的说明,
用@EnableTransactionManagement或者在配置文件里添加
<tx:annotation-driven transaction-manager="transactionManager"/>
来解决。
总结:自己掌握的不熟练所以漏洞百出,这也是第一次接触hibernate,一路坎坷,异常不断。还有也是自己学得太死,不灵活,在此记录一下经过,加深印象。
这一段各种奇葩异常都让我碰见了,网上也几乎找不到有效的解决办法。在此再列出两个
①eclipse只要启动maven工程,tomcat就崩溃,起不来,异常报的大意是说卡特琳娜发生错误一类的,网上各种办法都试了,困扰三天,后来把maven仓库的位置重新换个地方,重新下载jar包,问题得到解决。
②创建maven web工程时,all catlog 选项为空白,啥都没有,没法选择创建,参见这篇博客,给了我解决办法,在此向博主表示感谢。 http://blog.csdn.net/zhang5476499/article/details/51009022#comments 创建后若没有src/main/java 初始目录,检查JRE版本。
spring+springmvc+hibernate整合遇到的问题的更多相关文章
- 框架篇:Spring+SpringMVC+hibernate整合开发
前言: 最近闲的蛋疼,搭个框架写成博客记录下来,拉通一下之前所学知识,顺带装一下逼. 话不多说,我们直接步入正题. 准备工作: 1/ IntelliJIDEA的安装配置:jdk/tomcat等..(本 ...
- springmvc框架(Spring SpringMVC, Hibernate整合)
直接干货 model 考虑给用户展示什么.关注支撑业务的信息构成.构建成模型. control 调用业务逻辑产生合适的数据以及传递数据给视图用于呈献: view怎样对数据进行布局,以一种优美的方式展示 ...
- spring+springmvc+hibernate 整合
三大框架反反复复搭了很多次,虽然每次都能搭起来,但是效率不高.最近重新搭了一次,理顺了思路,整理了需要注意的地方,分享出来. 工具:Eclipse(jdk 1.7) spring和hibernate版 ...
- Spring MVC基础知识整理➣Spring+SpringMVC+Hibernate整合操作数据库
概述 Hibernate是一款优秀的ORM框架,能够连接并操作数据库,包括保存和修改数据.Spring MVC是Java的web框架,能够将Hibernate集成进去,完成数据的CRUD.Hibern ...
- Spring+SpringMvc+Hibernate整合记录
Spring+SpringMvc+Hibernate+Maven整合各大配置文件记录 1.Idea新建的Maven架构 2.Maven的对象模型的内容 <project xmlns=" ...
- 笔记48 Spring+SpringMVC+Hibernate整合
搭建Spring+SpringMVC+Hibernate的框架的思路如下: 1.创建Maven项目,按需映入Maven包依赖. 2.搭建Spring:配置Spring对控件层Bean的注入. 3.搭建 ...
- spring+springmvc+hibernate整合实例
最近要弄一个自动化生成表及其实体对应的增删改查的框架,于是我想到了hibernate,hibernate就有根据实体自动建表,而且增删改查,都不需要想mybatis那样在xml文件中配置. 不过怎样让 ...
- spring+springMVC+hibernate整合
首先我们要知道hibernate五大对象:,本实例通过深入的使用这五大对象和spring+springMVC相互结合,体会到框架的好处,提高我们的开发效率 Hibernate有五大核心接口,分别是:S ...
- SSH(Spring SpringMVC Hibernate)框架整合
项目说明: 使用SSH(Spring SpringMVC Hibernate)框架整合添加部门功能 项目结构 1.导入依赖jar包 <!--单测--> <dependency&g ...
随机推荐
- kali linux之手动漏洞挖掘三(sql注入)
服务器端程序将用户输入作为参数作为查询条件,直接拼写sql语句,并将结果返回给客户端浏览器 如判断登录 select * from users where user='uname' and passw ...
- 微服务架构下分布式事务解决方案——阿里云GTS
https://blog.csdn.net/jiangyu_gts/article/details/79470240 1 微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单.松耦合的服务,这 ...
- 使用C#来编写一个异步的Socket服务器
介绍 我最近需要为一个.net项目准备一个内部线程通信机制. 项目有多个使用ASP.NET,Windows 表单和控制台应用程序的服务器和客户端构成. 考虑到实现的可能性,我下定决心要使用原生的soc ...
- hdu 6196 搜索+剪枝
Today, Bob plays with a child. There is a row of n numbers. One can takes a number from the left sid ...
- day44--浮动和清浮动基本小结
浮动和清浮动 一:浮动 浮动元素会生成一个块级框,而不论它本身是何种元素. 关于浮动的两个特点: 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止. 由于浮动框不在文档的普 ...
- 应大数据时代而写了个磁力搜索的网页- WWW.MOVIH.COM 磁力
应大数据时代而写了个磁力搜索的网页- 索马里搜索磁力 http://www.,movih.com/ BT磁力示例网站:WWW.MOVIH.COM 采用分布式架构: JAVA系统:JBOSS7+EJB3 ...
- Codeforces - 914F bitset 维护字符串匹配个数
题意:给你一个串,支持两种操作,1修改某个点的字符,2询问[l,r]内模式串P与原串的匹配个数 bitset的写法是真的6啊,简直是优雅暴力的典范 bs[i]表示\(T_i\)与\(P\)匹配与否, ...
- HDU - 1300 简单DP
题意:买珠子的方案有两种,要么单独买,价钱为该种类数量+10乘上相应价格,要么多个种类的数量相加再+10乘上相应最高贵的价格买 坑点:排序会WA,喵喵喵? 为什么连续取就是dp的可行方案?我猜的.. ...
- TransactionScope小例
1 public static class DataTableHelper { public static List<T> ToModel<T>(this DataTable ...
- 计算机插U盘没用了
今天遇到一个神奇的状况,我想把台机上面的文件通过U盘拷贝到我的笔记本上.文件拷到U盘上没问题,然后把U盘插到笔记本上,一点反应都没有.我想了下,这U盘肯定没坏.然后我笔记本又是新买没多久,一直爱护有加 ...