hibernate 多对一删除的配置及问题

在此输入图片描述

KhXm.hbm.xml 考核项目的映射文件 <hibernate-mapping> <class name="com.gqb.dao.pojo.KhXm" table="kh_xm" catalog="kh"> <id name="khXmId" type="java.lang.Integer"> <column name="kh_xm_id" /> <generator class="native" /> </id> <property name="name" type="java.lang.String"> <column name="name" length="1000" /> </property> <property name="score" type="java.lang.Float"> <column name="score" precision="5" scale="0" /> </property> <property name="note" type="java.lang.String"> <column name="note" length="500" /> </property> <property name="year" type="java.lang.Integer"> <column name="year" /> </property> <many-to-one name="khDx" class="com.gqb.dao.pojo.KhDx" cascade="none" lazy="false" fetch="select"> <column name="kh_dx_id" /> </many-to-one> <!-- <property name="khDxId" type="java.lang.Integer"> <column name="kh_dx_id" /> </property> --> <property name="isCommon" type="java.lang.Integer"> <column name="is_common" /> </property> <property name="khDlId" type="java.lang.Integer"> <column name="kh_dl_id" /> </property> <property name="khFormId" type="java.lang.Integer"> <column name="kh_form_id" /> </property> <set name="khZbs" lazy="false" cascade="delete" inverse="true"> <key column="kh_xm_id"></key> <one-to-many class="com.gqb.dao.pojo.KhZb"/> </set> </class> </hibernate-mapping>

考核指标的映射文件 KhZb.hbm.xml <hibernate-mapping> <class name="com.gqb.dao.pojo.KhZb" table="kh_zb" catalog="kh"> <id name="khZbId" type="java.lang.Integer"> <column name="kh_zb_id" /> <generator class="native" /> </id> <property name="name" type="java.lang.String"> <column name="name" length="1000" /> </property> <property name="khXmId" type="java.lang.Integer"> <column name="kh_xm_id" /> </property> <property name="score" type="java.lang.Float"> <column name="score" precision="5" /> </property> <property name="note" type="java.lang.String"> <column name="note" length="500" /> </property> <!-- <property name="deptId" type="java.lang.Integer"> <column name="dept_id" /> </property> --> <many-to-one name="deptId" lazy="false" cascade="delete" fetch="select"> <column name="dept_id"></column> </many-to-one> <property name="year" type="java.lang.Integer"> <column name="year" /> </property> <property name="khDxId" type="java.lang.Integer"> <column name="kh_dx_id" /> </property>

</class>

</hibernate-mapping>

考核项目和考核指标是一对多的关系,在删除项目时必须要将指标一起删除或者将考核指标里的外键置为null或是0(推荐置为0,因为在mysql里,对字段为null的维护会带来额外的成本) 根据截图上的错误是在删除考核指标对象时,级联删除了考核指标的外键对应的类即考核对象,且外键为空,所以要将
<many-to-one name="deptId" lazy="false" cascade="delete" fetch="select"> <column name="dept_id"></column> </many-to-one> 里面的 cascade=“delete”改为 cascade="none" 即在删除多这一段的时候不进行级联操作,这样在级联删除考核指标时不会级联删除考核对象。 inverse 字段的配置,inverse的意思是对立面,反面的意思,所以可以很好的理解,当inverse="true"是就是将关系交由对方来维护。

转载于:https://my.oschina.net/u/255939/blog/388553

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值