我正在开发一个论坛,论坛的父版块和子版块之间是一对多自关联关系,删除一个父版块对象必须级联删除与之关联的子版块对象。我在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"/>
但是就是无法实现一对多级联删除,删除父版块记录之后,子版块记录依然还在,没被删除,这是怎么回事啊?
<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"/>
但是就是无法实现一对多级联删除,删除父版块记录之后,子版块记录依然还在,没被删除,这是怎么回事啊?
给个例子你:
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>调试过可以父子表也得到相应清空..
真是奇哉怪哉!!
用Set的得到对象,对象相应的属性清空就得了...
<set name="items" cascade="all">
<key column="order_id"></key>
<one-to-many class="cn.itcast.domain.OrderItem"/>
</set>
测试过了,完全可以