SSH框架整合常见问题汇总(一)

举报
SHQ5785 发表于 2022/08/25 09:22:11 2022/08/25
【摘要】 前言     以下所列问题具有针对性,但是遇到同类型问题时均可按照此思路进行解决。问题1     class "org.apache.commons.dbcp.BasicDataSource" not found     使用MyEclipse时,用ssh时,applicationContext出错提示说:     class"org.apache.commons.dbcp.BasicDat...

前言

     以下所列问题具有针对性,但是遇到同类型问题时均可按照此思路进行解决。

问题1

     class "org.apache.commons.dbcp.BasicDataSource" not found

     使用MyEclipse时,用ssh时,applicationContext出错提示说:

     class"org.apache.commons.dbcp.BasicDataSource" not found  

     解决

      1、是因为没有导入依赖包commons-dbcp.jar,导入此包即可

     2、在项目上右击build path—>configure build path..—>add library..—>MyEclipse Libraries选中Spring 2.0 Persistence JDBC libraries,同时可能会用到Spring 2.0 Persistence CORE libraries所以系统自动选上了,点击finish就可以了。

问题2

     org.hibernate.MappingException: persistent class not known: cn.edu.ujn.model.UserDetail

解决

     在userdetail表的反向工程文件中,将UserDetail类名写成了Userdetail导致后期报错,修正之后问题得以解决。怀疑是IDE存在问题。

<class name="cn.edu.ujn.model.UserDetail" table="userdetail" catalog="jkxyshsflower">

问题3

     org.apache.jasper.JasperException: /register.jsp(26,2) No tag "" defined in tag library imported with prefix "ss"

     解决

     标签书写一定要规范,自己所犯错误就是因为<ss:head/>中加了一个空格<ss: head/>导致项目报错。

问题4

     在dao层写入数据时又出现的问题: org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction cannot be cast to javax.transaction.Transaction

     解决

     导包时导入错误,应导入的包名为org.hibernate.Transaction;而非javax.transaction.Transaction;

问题5

     org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of cn.edu.ujn.model.User.userid

     解决

     从以上错误信息可以得出参数类型不匹配,也就是说在自定义的model.User类中的userid(String类型)数据类型与hibernate中即在数据库存放的数据类型(int类型)不一致,从而导致问题出现。将model.User中的userid数据类型更改为int即可解决问题。

问题6

     org.hibernate.exception.ConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`jkxyshsflower`.`userdetail`, CONSTRAINT `FK_userdetail` FOREIGN KEY (`userid`) REFERENCES `user` (`userid`) ON UPDATE CASCADE)

     解决

      因为userdetail表中设置了user外键(见下图)。我们期望实现的是在执行插入操作时数据写入user表的同时也会写入userdetail表内。故在user表的映射xml文件中添加了语句<one-to-one name="userdetail" class="cn.edu.ujn.model.UserDetail"  cascade="all"></one-to-one>。其中cascade="all"的作用就是级联更新级联删除。比如:数据库中有主键表和外键表,当设置了CASCADE之后,当删除主键表后,外键表也随之消失。但是设置之后出现了以上错误提示。取消cascade="all"之后,发现数据可以写入user表内,但并未写入userdetail表中。

 

user数据表数据情况如下:

其中,id为17的数据为自己新添加的数据,前面的数据为之前已有数据,但userdetail表中却没有插入相关的内容。

在mysql中手动删除之前的数据时,提示如下

 

     可见由于外键设置的原因。为此,需要首先理清一下各数据表之间的主外键依赖关系。我们应该注意的是外键起着维系表间关系的作用。当外键的值删除,主表中对应的列删除;当外键的值改变时,主表中对应的列值改变。有关数据表的主外键详见博文《MySQL进阶(一)主外键讲解》、《mysql进阶(十一)外键在数据库中的作用》。

     这个问题不稳定,一阵一阵的,隔天再来运行程序发现又可以写入了,但是后来又出现了外键约束的问题。

问题7

     HTTP Status 404 - No result defined for action cn.edu.ujn.action.UserAction and result input

     解决

     初步怀疑是缓存导致的问题,清理缓存之后问题已然存在。但是之前程序是没有任何问题的。没有result name=input的结果映射。如果页面正常输入,后台处理成功,那么走success界面;如果后台校验失败,会把error存放在指定变量中,这时默认result的name为input,而你没有配置,所以报错。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。