浏览 2077 次
|
锁定老贴子 主题:多对多删除联带全删除了
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2004-09-22
一个老师教许多学生,一个学生被许多老师教
class teacher{ String id; String name; Set students; } class student{ String id; String name; Set teachers; } [code:1] <class name="net.fengrun.stu.Teacher" table="teachers"> <id name="id" type="integer" column="id"> <generator class="native"/> </id> <property name="name"/> <set name="students" table="teacher_student" inverse="true" cascade="save-update" lazy="true"> <key column="teacherid"/> <many-to-many column="studentid" class="net.fengrun.stu.Student"/> </set> </class> <class name="net.fengrun.stu.Student" table="students"> <id name="id" type="integer" column="id"> <generator class="native"/> </id> <property name="name"/> <set name="teachers" table="teacher_student" inverse="false" cascade="all" lazy="true"> <key column="studentid"/> <many-to-many column="teacherid" class="net.fengrun.stu.Teacher"/> </set> </class> [/code:1] session.delete(teacher); Hibernate: delete from teacher_student where studentid=? Hibernate: delete from students where id=? Hibernate: delete from teachers where id=? 怎么联student也被删除了? 如何解决? 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2004-09-22
试试看:
set name="students" inverse="false" |
|
| 返回顶楼 | |
|
时间:2004-09-22
set name="students" inverse="false"时
Hibernate: delete from teacher_student where teacherid=? Hibernate: delete from teacher_student where studentid=? Hibernate: delete from students where id=? Hibernate: delete from teachers where id=? 反而多了一条! |
|
| 返回顶楼 | |
|
时间:2004-09-22
|
|
| 返回顶楼 | |
|
时间:2004-09-22
OH!
这个是 One2Many的情况 many-to-many的情况我再看看 |
|
| 返回顶楼 | |
|
时间:2004-09-22
你的这个需求:
cascade="none" 就可以了 |
|
| 返回顶楼 | |
|
时间:2004-09-22
cascade="none" 设置后:
session.delete(student)可以, Hibernate: delete from student_book where studentid=? Hibernate: delete from teacher_student where studentid=? Hibernate: delete from students where id=? session.delete(teacher)出错. java.sql.SQLException: Integrity constraint violation FK2E2EF2DEE4EE687D table |
|
| 返回顶楼 | |
|
时间:2004-09-22
不知道你用的是什么数据库
[code:1]<id name="id" type="integer" column="id"> <generator class="native"/> </id> [/code:1] Teacher,Student类的ID都是String,这里设置type="integer",虽然我没有测试过,可能你的程序也能run,但这样不好,容易发生ClassCastException [code:1]<set name="students" table="teacher_student" inverse="true" cascade="save-update" lazy="true"> [/code:1] 当这样设置的时候 如果仅仅是写了session.delete(teacher); 那么delete操作是不可能传播到Student对象的,因为你设置的是cascade="save-update",没有delete操作. 对于一个有着完整性检查的数据库(Mysql除外),这种设置的session.delete(teacher)都会抛出sql异常,原因是有子引用父的时候无法删除父 最好有完整的代码,否则很难分析你的问题 |
|
| 返回顶楼 | |
|
时间:2004-09-22
对不起,我贴错了,id全是Integer.
|
|
| 返回顶楼 | |
|
时间:2004-09-22
我用的数据库是hsqldb
|
|
| 返回顶楼 | |






