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"是就是将关系交由对方来维护。