我是一个 hibernate 新手,我不完全确定如何获得我正在寻找的级联行为。
我有两个类(class) Student 和 Class,具有单向多对多映射。当我删除学生时,出现此异常
无法删除或更新父行:外键约束失败(projet.T_CLASS_STUDENT,CONSTRAINT FK5DBF3D8967BCDD8B FOREIGN KEY (PERSON_ID) REFERENCES T_STUDENT (PERSON_ID))
我不明白为什么,我将级联设置为“删除”,但它不起作用! 事实上,当我删除一个学生时,我想删除关联表中的所有学生。
我的映射文件是:
<class name="persistenceClass.Class" table="T_CLASS">
<id name="Id" column="CLASS_ID">
<generator class="native" />
</id>
<many-to-one name="Formation" column="CLASS_FORMATION" class="persistenceClass.Formation" />
<many-to-one name="Year" column="CLASS_YEAR" class="persistenceClass.Year" />
<set name="Students" table="T_CLASS_STUDENT" cascade="delete" >
<key column="CLASS_ID" />
<many-to-many class="persistenceClass.Student" column="PERSON_ID" />
</set>
</class>
和:
<class name="persistenceClass.Person" table="T_PERSON" >
<id name="Id" column="PERSON_ID" >
<generator class="native" />
</id>
<property name="FirstName" column="PERSON_FIRST_NAME" not-null="true" />
<property name="LastName" column="PERSON_LAST_NAME" not-null="true" />
<property name="Type" column="PERSON_TYPE" not-null="true" />
<property name="BirthDate" column="PERSON_BIRTH_DATE" />
<property name="BirthCity" column="PERSON_BIRTH_CITY" />
<property name="PhoneNumber" column="PERSON_PHONE_NUMBER" />
<property name="MobileNumber" column="PERSON_MOBILE_NUMBER" />
<property name="Mail" column="PERSON_MAIL" />
<property name="Address" column="PERSON_ADDRESS_ADDRESS" />
<property name="ZipCode" column="PERSON_ADDRESS_ZIPCODE" />
<property name="City" column="PERSON_ADDRESS_CITY" />
<property name="Image" column="PERSON_IMAGE" type="image" />
<many-to-one name="Country" column="PERSON_ADDRESS_COUNTRY" class="persistenceClass.Country" />
<many-to-one name="BirthCountry" column="PERSON_BIRTH_COUNTRY" class="persistenceClass.Country" />
<many-to-one name="Civility" column="PERSON_CIVILITY" class="persistenceClass.Civility" />
<many-to-one name="Sex" column="PERSON_SEX" class="persistenceClass.Sex" />
<joined-subclass name="persistenceClass.Student" table="T_STUDENT">
<key column="PERSON_ID" />
</joined-subclass>
<joined-subclass name="persistenceClass.Teacher" table="T_TEACHER">
<key column="PERSON_ID" />
</joined-subclass>
</class>
最佳答案
正如您所描述的,类(class)和学生之间存在单向多对多关系,并且删除时具有级联。这意味着级联删除仅在您删除类(class)而不是学生时才有效。如果要删除某个学生,则必须先将其从相应类(class)对象的集合中删除。否则,您会收到问题中描述的异常。
如果您删除一个类(class),该类(class)的所有学生也应被删除 - 除非这些学生参加其他协会。
关于java - hibernate 多对多级联不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4249672/