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

hibernate中一对多删除时总报错外键约束,求解
//student.hbm.xml
<class name="Student">
  <id name="number">
  </id>
  <property name="name" length="10"/>
  <property name="sex" length="2"/>
  <set name="courses" table="student_course" cascade="all">
  <key column="student_id"/>
  <many-to-many class="Course" column="course_id"/>
  </set>
  </class>


//course.hbm.xml
<class name="Course" >
  <id name="courseId">
  <generator class="native"/>
  </id>
  <property name="name" length="10"/>
  <property name="scores"/>
  <property name="semester" length="1"/>
  <set name="students" table="student_course" inverse="true">
  <key column="course_id"/>
  <many-to-many class="Student" column="student_id"/>
  <set>
  </class>

删除学生时报错说外键约束:
 public void deleteStudent(){
Session s = HibernateUtil.getSession();
Transaction tx = s.beginTransaction();

Query query = s.createQuery("delete Student stu where stu.name=:name");
query.setParameter("name", "aaa");
query.executeUpdate();
tx.commit();
s.close();
}

------解决方案--------------------
<many-to-many class="Student" column="student_id"/>

你这是多对多啊,删除学生的时候,它跟班级有关联,所以才报的错哇。
------解决方案--------------------
一般使用many-to-one就可以的了
------解决方案--------------------
对他进行删除验证,也就是删除之前先删除与之有关系的外键表!