问题描述
对hibernate刚入手,不得其精华配置文件如下主表<class name="PrototypeOversea" table="T_MT_PROTOTYPEOVERSEA"><id name="sid" type="java.lang.Integer"><column name="SID" precision="10" scale="0" /><generator class="sequence"><param name="sequence">SEQ_MT_PROTOOVERSEA</param></generator></id><set name="items" cascade="all" inverse="true" lazy="false" order-by="ITEMID"><key><column name="PROTOTYPEOVERSEAID" /><!-- 子表的外键 --></key><one-to-many class="PrototypeOverseaItem" /><!-- 子表的关联class --></set></class>子表<class name="PrototypeOverseaItem" table="T_MT_PROTOTYPEOVERSEAITEM"><id name="itemId" type="java.lang.Integer"><column name="ITEMID" precision="10" scale="0" /><generator class="sequence"><param name="sequence">SEQ_MT_PROTOOVERSEA_ITEM</param></generator></id><!-- class 指定主表关联的class --><many-to-one name="pos" class="PrototypeOversea" fetch="select" not-null="true"><column name="PROTOTYPEOVERSEAID" precision="10" scale="0"></column><!-- column为字表里和主表关联的外键 --></many-to-one></class>现在的问题是,当主表的set集合items减少时,子表不会自动删除set里没有的记录目前,主表的set集合items增加时,子表会自动添加set添加的记录。 问题补充:lt0604 写道
解决方案
你说的这种删除我觉得,应该在主表中检索出所有的子表对象,再remove掉后save不知道你是怎么操作的,以前还真没试过这种处理方式,item集合既要判断新增,修改,还要判断删除。====>我已经的处理方式都是将子对象直接删除。
解决方案二:
把你的代码贴出来看看。
解决方案三:
级联删除是在删除主表的同时删除子表!
解决方案四:
inverse="true"这个是由对方维持关系,需要删除子表记录,需要再set集合中remove的同时,将remove掉的对象逐一解除与主表的关联。PrototypeOverseaItem.setPrototypeOversea(null);
解决方案五:
http://blog.csdn.net/daniel_tu/archive/2009/02/24/3932078.aspx