如何在hibernate一对多关系中删除one方,让many一方中引用one的一方置空?
下面是adminType.xml<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>
    <class name="com.hubu.model.AdminType" table="tb_admintype">
        <id name="adminTypeId" type="java.lang.Integer">
            <column name="adminTypeID" />
            <generator class="assigned" />
        </id>
        <property name="adminTypeName" type="java.lang.String">
            <column name="adminTypeName" length="50" />
        </property>
        <property name="adminTypeDesc" type="java.lang.String">
            <column name="adminTypeDesc" length="200" />
        </property>
        <set name="admins" inverse="true" lazy="true" cascade="save-update">
         <key>
         <column name="adminTypeID" />
         </key>
         <one-to-many class="com.hubu.model.Admin" />
        </set>
    </class>
</hibernate-mapping>
admin.xml<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.hubu.model.Admin" table="tb_admin">
        <id name="adminId" type="java.lang.String">
            <column name="adminID" length="20" />
            <generator class="assigned" />
        </id>
        <many-to-one name="adminType" class="com.hubu.model.AdminType" fetch="select" cascade="all">
            <column name="adminTypeID" />
        </many-to-one>
        <property name="adminName" type="java.lang.String">
            <column name="adminName" length="20" not-null="true" />
        </property>
        <property name="adminPhone" type="java.lang.String">
            <column name="adminPhone" length="20" />
        </property>
        <property name="adminTel" type="java.lang.String">
            <column name="adminTel" length="20" />
        </property>
        <property name="adminEmail" type="java.lang.String">
            <column name="adminEmail" length="30" />
        </property>
        <property name="adminGender" type="java.lang.Integer">
            <column name="adminGender" />
        </property>
        <property name="password" type="java.lang.String">
            <column name="password" length="20" />
        </property>
    </class>
</hibernate-mapping>

解决方案 »

  1.   

    AdminType,你要删除其中一个adminType,那么你要先把关联全部去掉,adminType.remove(admin);admin.remove(adminType);不过你需要给admin一个新的adminType。
    然后你再session.delete(adminType)
      

  2.   

    可以尝试设成admin-adminType的多对一单项关联,这样删除admin时候不会影响adminType的一方。
      

  3.   

    可以在一得一方配置cascade="save-update",试试
      

  4.   

    你应该不要求删除adminType的时候,把admin删除吧,所以不要配置cascade="delete",只要把对应的关系删除,然后删除adminType就可以了。
      

  5.   

    不需配置cascade="delete",把对应的关系删除,删除adminType 
      

  6.   

    AdminType,你要删除其中一个adminType,那么你要先把关联全部去掉,adminType.remove(admin);admin.remove(adminType);不过你需要给admin一个新的adminType。
    然后你再session.delete(adminType)