日期:2014-05-19  浏览次数:20664 次

hibernate如何实现双向1-1关联的级联删除
我的一个练手项目,所有登陆用户都存在一个t_user表中,然后,用户的其他信息存在另外一张表中,它们是双向1-1关联。现在想删除t_user表的一条记录的同时删除该用户对应的信息表中的记录,hibernate配置如下:
<!-- 用户表,和老师表、管理员表,学生表都是双向1-1关联 -->
<class name="User" table="t_user">
<id name="id" column="uid">
<generator class="identity"></generator>
</id>
<one-to-one name="admin" property-ref="user" cascade="all"/>
<one-to-one name="teacher" property-ref="user"/>
<one-to-one name="student" property-ref="user"/>
<property name="uname" column="uname"></property>
<property name="upass" column="upass"></property>
<property name="utype" column="utype"></property>
<property name="islogin" column="islogin"></property>
</class>
<!-- 管理员表,和User表双向1-1关联 -->
<class name="Admin" table="t_admin">
<id name="id" column="aid">
<generator class="identity"></generator>
</id>
<many-to-one name="user" unique="true" column="uid" not-null="true"/>
<property name="realname" column="realname"></property>
<property name="birthday" column="birthday"></property>
<property name="sex" column="sex"></property>
<property name="title" column="title"></property>
<property name="email" column="email"></property>
</class>

user表和admin表通过外键关联的,hibernate如何在删除user表的记录的同时删除admin表中对应的记录???

设置cascade=all也不行,只能删除admin表的记录,如果删除user表会出现约束而无法删除。。。。。

求教。。。。。。



------解决方案--------------------
Hibernae映射继承的方法有:
 (1)每一个具体类对应一个表,在你的系统中抽象类是User,具体类是Teacher,Admin,Student
 所以只需要三个表t_teacher, t_admin, t_student,而抽象类User不需要映射.
 据我观察你不是使用这种方法.
 (2)继承关系中的根类对应一个表,也就是只有一个t_user表,然后使用"判别器"来分辨不同的子类
 虽然你使用了utype字段,但好像你也不是使用这种方法.
 (3)继承关系树的每个类都对应一个表共四张表:t_user, t_teacher, t_admin, t_student.
 你好像在使用这种方法,但是你的映射文件是有问题的.应该是:
 -------------User.hbm.xml--------------------------
 <hibernate-mapping>
 <class name="User" table="t_user">
<id name="id" column="uid">
<generator class="identity"></generator>
</id>
<property name="uname" column="uname"></property>
<property name="upass" column="upass"></property>
<property name="utype" column="utype"></property>
<property name="islogin" column="islogin"></property>
 </class>
 </hibernate-mapping>
 -------------Admin.hbm.xml--------------------------
 <hibernate-mapping>
<joined-subclass name="Admin" table="t_admin" extends="User">
<property name="realname" column="realname"></property>
<property name="birthday" column="birthday"></property>
<property name="sex" column="sex"></property>
<property name="title" column="title"></property>
<property name="email" column="email"></property>
</joine