错误的原因在于你删除了这个customer对象的时候没把这个可户的orders对象给删除。
删除这个customer对象后,对应order表中的和这个customer相关的记录的customer_id这个字段就只能为null了,
但是你的这个字段又是不能为空的。
Hibernate: select customers0_.ID as ID1_0_, customers0_.NAME as NAME1_0_ from do.dbo.CUSTOMERS customers0_ where customers0_.ID=? //取这个对象
Tom
Hibernate: select orders0_.CUSTOMER_ID as CUSTOMER3_1_, orders0_.ID as ID1_, orders0_.ID as ID2_0_, orders0_.ORDER_NUMBER as ORDER2_2_0_, orders0_.CUSTOMER_ID as CUSTOMER3_2_0_ from do.dbo.ORDERS orders0_ where orders0_.CUSTOMER_ID=? //删除这个对象
Hibernate: update do.dbo.ORDERS set CUSTOMER_ID=null where CUSTOMER_ID=?
//级连更新,把null赋给非null ,会出问题的在customer配置文件中<set>加上 cascade="all" . 意思就是对customer对象的操作会级联到order上。
inverse = "false" ,表示由customer对象维持关系 .
删除这个customer对象后,对应order表中的和这个customer相关的记录的customer_id这个字段就只能为null了,
但是你的这个字段又是不能为空的。
Hibernate: select customers0_.ID as ID1_0_, customers0_.NAME as NAME1_0_ from do.dbo.CUSTOMERS customers0_ where customers0_.ID=? //取这个对象
Tom
Hibernate: select orders0_.CUSTOMER_ID as CUSTOMER3_1_, orders0_.ID as ID1_, orders0_.ID as ID2_0_, orders0_.ORDER_NUMBER as ORDER2_2_0_, orders0_.CUSTOMER_ID as CUSTOMER3_2_0_ from do.dbo.ORDERS orders0_ where orders0_.CUSTOMER_ID=? //删除这个对象
Hibernate: update do.dbo.ORDERS set CUSTOMER_ID=null where CUSTOMER_ID=?
//级连更新,把null赋给非null ,会出问题的在customer配置文件中<set>加上 cascade="all" . 意思就是对customer对象的操作会级联到order上。
inverse = "false" ,表示由customer对象维持关系 .
解决方案 »
- myeclipse中利用jbpm插件画出流程图后,png文件显示不正确
- eclipse里面怎样用ant来编译jsp文件
- wsad中,jsp页面无法解析el和jstl表达式?求解,心力交瘁!
- 求指教 关于数据库一定时间断开连接的问题
- java 怎么实现 大文件上传。 。 。
- 请教Hibernate的Query接口里的iterate方法和查询缓存协作的问题
- ********java 高手来抢分了!!!在线等待********
- 请问J2EE是干什么的,我想学JAVA,但是,找不到方向
- 我想请教一下
- ejb运行的环境如何配置啊?!!
- Hibernate映射文件中property元素中的formula属性不能用?
- 请问JSTL中可以定义数组类型吗?
最后我把它改成了true,才可以级联删除,不过有些地方我不是很明白
<set
name="orders"
cascade="delete"
inverse="true" //将关联关系的维护工作交给了对象Order
>
也就是说,按照Order对象状态的变化来同步更新数据库,
但是在操作的时候,我删除的是customer对象,并没有删除orders对象
为什么可以级联删除?
因为如果一个customer有多个orders,那么删除一个order是不应该删除这个customer的。<set
name="orders"
cascade="delete"
inverse="true" //将关联关系的维护工作交给了对象Order
> 这个配置是不符合上面逻辑的。你在order的配置文件里 <many-to-one > 加上 inverse="true" ,cascade="delete"表示由customer来控制级联 。上面的inverse="true" 去掉。然后程序里面操作的是删除customer对象 。