最后,记录一下我在本次项目中遇到的一些典型的bug及其解决方法。
1) 在搭建SSH框架时,由于单独用Hibernate和集成在SSH框架上用还是有区别的,所以刚开始只是做了个简单结合,没有把hibernate的配置融入spring的配置,就出现了“hibernate找不到xxx.cfg.xml”这样的报错。
解决办法:由于SSH框架应该把配置都集成到Ioc容器里,故应该把cfg的配置文件配置在applicationContext.xml中,再把cfg这个独立的xml去掉。
2) 调用DAO层的接口时,没有通过bean的方法调用,直接new了一个对象来调用,报了“NullPointer”的错误。
解决办法:由于没有像图8.1中那样调用DAO层的接口,故而没有对DAO的对象进行依赖注入,故而是个空指针,只要像图中那样调用即可。
图8.1 正确调用DAO层
3) 搭建SSH框架时,报错“Error creating bean withname 'sessionFactory' defined in ServletContext resource[/WEB-INF/classes/applicationContext.xml]: Invocation of init method failed;nested exception is java.io.FileNotFoundException: class path resource[shMVC.entity/] cannot be resolved to URL because it does not exist”。
解决办法:报错的意思是找不到实体的路径,那么问题即出在hibernate的实体映射中,只要把hibernate的映射文件的路径的“.”改成“/”即可。
4) 配置SpringMVC的配置文件时,报错“Line 11 in XML documentfrom ServletContext resource [/WEB-INF/classes/applicationContext.xml] is invalid;nested exception is org.xml.sax.SAXParseException; lineNumber: 11;columnNumber: 69; cvc-elt.1: 找不到元素 'beans' 的声明”。
解决办法:把<bean\>标签改为<beans:bean\>即可
5) 配置hibernate时,报错“Errorcreating bean with name 'sessionFactory' defined in ServletContext resource[/WEB-INF/classes/applicationContext.xml]: Invocation of init method failed;nested exception is org.hibernate.MappingException: Could not get constructorfor org.hibernate.persister.entity.SingleTableEntityPersister”。
解决办法:问题出在实体映射,检查过后,发现是实体配置文件漏写了一些属性。
6) 使用DAO接口查询下载列表的时候,报错如图8.2。
Servlet.service() for servlet [mvc-dispatcher] in context with path [/SSH] threw exception [Request processing....
org.hibernate.hql.internal.ast.QuerySyntaxException:downloadTable is not mapped
图8.2 报错
解决办法:由于我写hql语句的时候,把表名写成了数据库的表名,以及其属性也是数据库的属性名,导致出错;因为hql语句的表名应该对应的是实体类的类名以及其成员变量。
到此总结完毕,以后会继续更新,可能会搬我的学习笔记上来。