关于hibernate中list配置list-index自动更新的问题(原)

在目前的项目中碰到一个问题,发现单据明细被删除后,返回的list大小并没有变化,被删除的明细,在list中为null,因此造成遍历时,报空指针.一开始百思不得其解,为什么删除了,还在占位.仔细观察配置,发现是list-index的问题,该条明细被删除后,list-index指向的列没有自动更新,hibernate返回的值是按最小到最大之间的size,但是又没有该条记录,所以用null占位.另外提一下,我们项目用的删除delete()方法是直接删除对象.
经查,解决办法如下二种:
1.使用list的方法remove().再store().
2.在配置中,inverse=false,则list-index才会自动更新.
在一对多中,配置一定要是
<list name="transferDocDetails" lazy="true" cascade="[color=violet]all-delete-orphan[/color]">
<key column="TRANSFERDOC_ID"/>
<list-index column="LINE_NO"/>
<one-to-many class="com.vtradex.swms.server.model.transfer.TransferDocDetail"/>
</list>
对一种关联(多对一,或者集合)使用cascade="all"映射,就把这种关联标记为一种父/子(parent/child)风格的关系,对父对象进行保存/更新/删除会导致对(所有)子对象的保存/更新/删除。但是这个比喻并不是特别确切。如果父对象解除了对某个子对象的关联,那这个子对象就不会被自动删除了。除非这是一个一对多的关联,并且标明了cascade="all-delete-orphan"(所有-删除-孤儿),级联操作的精确语义在下面列出:
*

如果父对象被保存,所有的子对象会被传递到saveOrUpdate()方法去执行
*

如果父对象被传递到update()或者saveOrUpdate(),所有的子对象会被传递到saveOrUpdate()方法去执行
*

如果一个临时的子对象被一个持久化的父对象引用了,它会被传递到saveOrUpdate()去执行
*

如果父对象被删除了,所有的子对象对被传递到delete()方法执行
*

如果临时的子对象不再被持久化的父对象引用,什么都不会发生(必要时,程序应该明确的删除这个子对象),除非声明了cascade="all-delete-orphan",在这种情况下,成为“孤儿”的子对象会被删除。
还有一种方法是cascade=all ,从list中remove(),然后delete(),再store(),也是可以的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值