您的位置:首页 > 编程语言 > Java开发

商城之点滴错误总结

2017-03-11 11:40 274 查看
写来惭愧,做商城的时候遇到了不少的错但是笔记记下来的很少,仅有的 最后留心记下来的 也在我刚才多次地 复制粘贴的过程中烟消云散了,但是还是感觉应该记录一下,要不凭我这转眼即逝的记性(⊙﹏⊙)b

商城用的是SSH框架,这个之前也有一些介绍

关于外键: 

cannot delete or update a parent row :a foregin key constraint fails('shop'……


在删除商品product的时候由于订单项orderitems这个表将pid(porduct的主键)设置成了外键,删的时候没有步调一致,orderitems就闹了点脾气;这个错让me纠结了半天,有一个解决方案说:set foreign_key_checks=0,我再Dao层设置了一下,报红线、好吧,暴露智商了,后来查到了一些比较专业对口的 点击打开链接

先说下什么是外键:

如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字

为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。

级联删除,即在删除product表中的记录时同时删除orderitem表中的相关记录

后面发现这个 在代码里有相关的对策cascade = “delete”,但是可能我忘记写了吧,现在补上:

<many-to-one name="product" lazy="false" cascade = "delete" not-found="ignore" class="cn.itcast.shop.product.vo.Product" column="pid"  ></many-to-one>


关于cascade = “delete”还有inverse="true"偶滴这篇小文有写,移步请点;但是告诉你们一个秘密就是我的问题不是这么解决的
下面就无私地告诉你们第二个解决方案:删除外键索引,这个其实一点low,开始我再数据库中删、竟然不让删除,多次无果我果断把数据库删除了(有脚本任性)执行了一次脚本重新导入,删的话MySQL听话多了,特别利索地搞定、问题解决

不知道大家有没有注意到上面代码中的:not-found="ignore",这个是没有No row with the given identifier exists 的问题

这个是上面问题的遗留啦,删除之后 外键关联的对应主键内容不存在,有了脏数据,就这样了

如果hibenrate设置的单项关联,即使a中的id2为null值,b中id2中有值,查询都不会出错.但是如果a中的id2字段有值,但是这个值在b中主键值里并没有,就会报上面的错!

如果hibernate是双向关联,那么a中的id2为null值,但是b中如果有值,就会报这个错.这种情况目前的解决办法就是改成单项关联,或者把不对应的数据改对!  点击打开链接

所以:设断点或者怎样找到 脏数据删除,或者就像上面ignore

下一个:no find a getter fo orders in class cn,itcast.shop.order.vo.User 大概是这个意思,看来wuli记忆力还可以撒

<set name="orders" cascade="delete" lazy="false" >
<key column="uid"/>
<one-to-many class="cn.itcast.shop.order.vo.Order"/>
</set>


这个是哪里报错了?上网查 找order类再找user类,无用功用过之后,find到了真正的原因、链接忘了,这个记忆力再好估计也想不起来了吧O(∩_∩)O

没有广告、马上回来:User.java中少些了 orders(⊙﹏⊙)b

private Set<Order> orders = new HashSet<Order>();
public Set<Order> getOrders() {
return orders;
}
public void setOrders(Set<Order> orders) {
this.orders = orders;
}


还有啥、忘记了,想起来再补吧

小记:

这么多错大概是因为少写了东西造成的,认真、认真再认真

其实我还是挺认真的,毕竟还是有那么一段时间,代码敲出来清一色 运行极其顺利,好怀念;不过那段时间也没有学到什么新东西,对SSH框架、整个商场的逻辑倒是熟悉了,这样想着 偶尔写错个代码也挺好的,喜欢自虐O(∩_∩)O,其实不是、通过这些错误学到了东西、收获了一些知识

开始遇到错误内心是抗拒的,因为手里的项目还有实习的事情也没想赶紧结束这个进度,所以有问题就放着结果、你晓得,自己种下的苦果自己尝,遇到问题解决问题,效率要提高

商城结束要感谢银铃大美女,李硕,王啸、刚鹏还有建敏的慷慨帮助,在下在此谢过了,不胜感激

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息