异常:
Org.hibernate.lazyinitializationException:could not initialize proxy –no session
这是延迟加载的一个问题,主要原因是service层在开启事务后经过Dao的查询的对象是代理的对象且没有实际参数,只有在使用时才会帮我初始化对象。此时事务提交后session被销毁,而web端得到的是该代理对象,如果此时去初始化对象时会抛出以上异常,因为该对象此时处于游离态。
解决:
- 不使用延迟加载
- 手动将延迟加载初始化 Hibernate.initialize(延迟对象)
3.使用spring提供的一个OpenSessionInViewFilter来解决(推荐)
在web.xml中配置一个filter
异常:
不能实例化一个action 没有在namespace下发现某个方法。。。。。
分析:此种异常可能是注解开发时,在向目标类注入是出现异常,导致注入失败,抛出此异常。
如向一个action注入一个service 属性时,service类有代码错误或异常(如service没有写入注解代码====)那么,service就会注入失败,此时会导致抛出此异常。
异常:
如果一直提示spring的事务处于read-only状态
分析:查看 pointcut配置是否正确(如execution的包名是否正确,表达式是否正确) ,错误会导致无法拦截具体方法,否则就会走默认的事务,出现以上错误
异常:
如果提示某注入对象无法读取,无法注入,
分析:查看applicationContext.xml中的对应注入名称是否与set方法和变量名相同
如:
Applicationcontext.xml如下:
<bean id="userService"class="cn.itheima.service.UserServiceImpl"> <property name="userDao" ref="userDao" /> </bean>
Service对应的代码如下:就会导致以上错误
异常:
mawen整合下 tomcat启动失败。报tomcat catalina异常
分析:
配置对应的scope的例外。
异常:
抛出 hibernate mapped 异常
分析:检查hibernate HQL语句,(如 from user之类的 因为HQL语句是面向对象的 ,而对应的PO类是User,因此会抛出from user找不到mapped )
异常:
Mawen抛出子模块的bean文件找不到undefined
分析:
此异常可能是拆分applicationContext.xml文件后,web.xml文件中引入contextConfigLocation属性没有使用通配符导致找不到对应xml文件。
异常:启动tomcat时抛出Could not find artifact 父项目
分析:启动有依赖的项目时,必须将被依赖的项目安装到本地仓库。使用 mawen.install
异常:
Oracle进程TNSLSNR.EXE (PID:5848)占用8080端口
解决:使用sqlplus 登陆oracle 输入以下命令:
-- 把HTTP/WEBDAV端口从8080改到8081 SQL> call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(), '/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()',8081)) / -- 把FTP端口从2100改到2111 SQL> call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(), '/xdbconfig/sysconfig/protocolconfig/ftpconfig/ftp-port/text()',2111)) / SQL> commit; SQL> exec dbms_xdb.cfg_refresh; -- 检查修改是否已经成功 SQL> select dbms_xdb.cfg_get from dual;
异常:
Spring整合在单独对dao模块使用Test测试时,为保证不报错,需要在测试方法上加一个事务@Transaction(正式代码加在service上),但此时会导致测试完成后 会对事务进行回滚,引发操作成功但数据库数据无改变。(如图)
解决:
才测试类的@Transaction 后面加一条阻止回滚的注解 @Rollback(false)
异常:
使用springDate findAll和pageRequest 进行分页查询时 查询无结果或结果不对
分析:
在pageable的实现pageRequest中,其默认的page参数是从0开始,而easyUi中的数据表发送是从1开始,故出现此情况解决如图
异常:
注意,mawen项目下,经常会出现各种错误,比如所有包莫名失效,或者其实修改正确,但还是会报错,可能就是我们的mawen缓存问题刷新下项目即可。
异常:
代码如下:
分析:struts2在做AJAX的响应时,不需要location,否则会导致以上错误。原因可能在location做出响应后,valueStack生命周期结束,而struts2中默认将值栈栈顶数据转换,导致空指针异常。
异常:
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.
(分析):这个异常产生的主要原因是DAO采用了Spring容器的事务管理策略,如果操作方法的名称和事务策略中指定的被管理的名称不能够匹配上,spring 就会采取默认的事务管理策略(PROPAGATION_REQUIRED,read only).如果是插入和修改操作,就不被允许的,所以报这个异常
(解决):整合时如果不启用事务也会导致采用默认事务级别,此时如果使用数据库的增删操作是不被允许的
异常:
解决:spring与hibernate3||4整合时会出现以上异常 也有可能是导入了错误版本的hibernate如下在继承hibernateDaoSupport时导入错误包
异常:
sessionFactory is defind(一般在解决弄session时配置opensessioninviewfilter后出现。)
解决:
原因1:
是OpenSessionInViewFilter这个类中有个属性叫 sessionFactoryBeanName默认值为sessionFactory,而applicationContext.xml的配置文件中SessionFactory不叫这个名字,修改名字后正常。
原因2:如Spring整合JPA的时候使用spring整合hibernate的filter,spring整合JPA filter配置如下