我正在开发一个论坛,论坛的父版块和子版块之间是一对多自关联关系,删除一个父版块对象必须级联删除与之关联的子版块对象。我在Hibernate的映射文件中是这样配置的,应该没错:
    <set name="childBoards" cascade="all" outer-join="true">
      <key column="PARENTID"/>
      <one-to-many class="Board"/>
    </set>
    <many-to-one class="Board" cascade="none" column="PARENTID" name="parent" not-null="false" outer-join="true"/>
但是就是无法实现一对多级联删除,删除父版块记录之后,子版块记录依然还在,没被删除,这是怎么回事啊?

解决方案 »

  1.   

    把你相应的Set清空..hql还会根据你的set情况来做一些操作..
    给个例子你:
       Session session=Factory.getInstance().getSessionFactory().openSession();
       Transaction ts=session.beginTransaction();
       try{
         Person p=(Person)session.load(Person.class, "402880cb21f84a160121f84a189e0002");
         p.getPhones().clear();//返回时以个Set容器..要把内面内容清空..
         session.delete(p);
         ts.commit();
       }catch(HibernateException e){
       System.out.print(e.getStackTrace());
       ts.rollback();
       }
       }<hibernate-mapping>
      <class name="javabean.Person" table="person">
      <id name="id" column="id" type="string">
      <generator class="uuid.hex"></generator>
      </id>
      <property name="name" column="name" type="string"/>
      <set name="phones" table="phone" cascade="all" inverse="true">
      <key column="person_id"></key>
      <one-to-many class="javabean.Phone"/>
      </set>
      </class>
    </hibernate-mapping><hibernate-mapping>
       <class name="javabean.Phone" table="phone">
       <id name="id" column="id" type="string">
       <generator class="uuid.hex"></generator>
       </id>
       <property name="number" column="number"></property>
       <many-to-one name="person" column="person_id" cascade="save-update"></many-to-one>
       </class>
    </hibernate-mapping>调试过可以父子表也得到相应清空..
      

  2.   

     加上这个属性试试 inverse="true"
      

  3.   

    cascade="none" 改一下吧  all或delete
      

  4.   

    加上inverse="true"的话,不是删除子记录,而是把子记录的PARENTID字段都变成null了,相当于save-update.
    真是奇哉怪哉!!
      

  5.   

    一开始又不说删一个字段..
    用Set的得到对象,对象相应的属性清空就得了...
      

  6.   

     <many-to-one name="order" column="order_id"></many-to-one>
    <set name="items" cascade="all">
             <key column="order_id"></key>
             <one-to-many class="cn.itcast.domain.OrderItem"/>
            </set>
    测试过了,完全可以