hibernate的问题 本帖最后由 cainiao223 于 2010-11-11 14:52:00 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 inverse=ture 意思是关系被维护方,写在one的一方是不是有点不合适?cascade=all 没有问题,一般都是one的一方是老大 inverse=ture 一般都是写在one的一方的好不好我发现问题是出在 lazy=false 上由于lazy=false 导致 在one的一方cascade=all前提下many一方不能删除自己 把cascade=all 改成delete 可以解决把lazy=false 改成lazy=ture 也可以解决 但是我想知道为什么many一方删除自己 怎么会有级联操作?还引发了deleted object would be re-saved by cascade我观察了代码 报错的时候 先查询了改日志 又查询了该日志对应的宠物 再查询了宠物的的所有日志一共三条语句之后报错而把cascade=all 改成delete 之后依然是这3条语句 之后执行的操作谁能帮我理下思路1、lazy=ture 为什么不报错2、lazy=false 且 cascade=all 为什么报错3、lazy=false 且cascade=delete 为什么不报错 我不知道你为什么觉得inverse=true是在one的一方,但是我告诉你为什么。inverse是关系被维护的意思,即一方在删除的时候,也会同时删除inverse=true的一方。打个比方,你删除了宠物的某个日志,但是one的一方inverse=true,所以one的一方也会删除,但是one的一方还关联着别的many,由于外键约束的关系,无法删除,报错!!明白了吗?当你many的一方只有1个元素的时候,我估计就不会报错了。 当你在删除操作的时候,cascade=all 还是delete 是一样的,没什么区别,不要误导自己 1、lazy=ture 为什么不报错2、lazy=false 且 cascade=all 为什么报错3、lazy=false 且cascade=delete 为什么不报错 (宠物可以有很多宠物日志 宠物是one的一方 日志是many的一方 现在问题就是cascade=all情况下 mang一方不能删除自己。为什么?)我觉得应该是lazy和cascade 的问题,你知道吗,如果你吧lazy设为false的话,它就会把所有的信息都会查找出来,不管你有没有用到的信息,而你又把cascade设为all,代表任何的增删改查都可以,当你这样去执行删除语句的话,它就会先删除many的一方,然后再去删除one 的一 方,这样就会引发异常了,因为你的one的一方还有许多的many对应着它。我想应该是后者的可能性大些。楼主自己再多做几遍罗。 分都给你了 但是inverse=true确实应该在one的一方一百个员工记住一个老板容易还是一个老板记住100个员工容易呢明显由员工记住老板比较科学(每个人记住一个人就好了)在 one(老板)的一方 inverse=true 反转开启 将维护权交给了多的一方(员工)我是这么理解的 inverse=true实际上是去解放了one那一方,在这儿就是指上面的 老板 对象,他不需要在每次更新的时候,都把 员工 都加载出来 用js 如何得到在服务器端输出到页面的html中某個元素 AXIS2 发布问题 hibernate dialect 问题 hibernate select查询struts2标签显示问题 最进在看孙鑫的Java_Web开发详解,有一些问题请教 tomcat自动关闭的问题! 实在找不到答案了,EJB返回Collection错误 tomcat问题 高手请教:本人想学J2EE,需要那些准备! 图片循环显示如何实现? 报错classnotfound,但是我的类存在啊 搞JAVA开发的 以下几门课程哪几门相对重要?
cascade=all 没有问题,一般都是one的一方是老大
我发现问题是出在 lazy=false 上
由于lazy=false 导致 在one的一方cascade=all前提下
many一方不能删除自己 把cascade=all 改成delete 可以解决
把lazy=false 改成lazy=ture 也可以解决
但是我想知道为什么many一方删除自己 怎么会有级联操作?还引发了deleted object would be re-saved by cascade我观察了代码 报错的时候 先查询了改日志 又查询了该日志对应的宠物 再查询了宠物的的所有日志
一共三条语句之后报错
而把cascade=all 改成delete 之后依然是这3条语句 之后执行的操作
谁能帮我理下思路
1、lazy=ture 为什么不报错
2、lazy=false 且 cascade=all 为什么报错
3、lazy=false 且cascade=delete 为什么不报错
inverse是关系被维护的意思,即一方在删除的时候,也会同时删除inverse=true的一方。
打个比方,你删除了宠物的某个日志,但是one的一方inverse=true,所以one的一方也会删除,但是one的一方还关联着别的many,由于外键约束的关系,无法删除,报错!!明白了吗?
当你many的一方只有1个元素的时候,我估计就不会报错了。
2、lazy=false 且 cascade=all 为什么报错
3、lazy=false 且cascade=delete 为什么不报错 (宠物可以有很多宠物日志 宠物是one的一方 日志是many的一方 现在问题就是cascade=all情况下 mang一方不能删除自己。为什么?)
我觉得应该是lazy和cascade 的问题,你知道吗,如果你吧lazy设为false的话,它就会把所有的信息都会查找出来,不管你有没有用到的信息,而你又把cascade设为all,代表任何的增删改查都可以,当你这样去执行删除语句的话,它就会先删除many的一方,然后再去删除one 的一 方,这样就会引发异常了,因为你的one的一方还有许多的many对应着它。我想应该是后者的可能性大些。楼主自己再多做几遍罗。
一百个员工记住一个老板容易还是一个老板记住100个员工容易呢
明显由员工记住老板比较科学(每个人记住一个人就好了)
在 one(老板)的一方 inverse=true 反转开启 将维护权交给了多的一方(员工)
我是这么理解的