java - hibernate 多对多级联不起作用

标签 java hibernate

我是一个 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/

相关文章:

java - Hibernate二级缓存清除

java - 单元测试 Spark 流

java - 为什么在 Java 中清除值时我们得到一个空映射?

hibernate - Tomcat 上的 Spring Security/JSF/Hibernate 意外 session 劫持?

java - JPA EntityManager 从其他包中发现实体 (OSGI)

java - Hibernate 三重多对多连接

java - 在Java中创建数组时是否调用了Object构造函数?

java - 如何使用 matlabcontrol 从 Java 调用 Matlab 函数,而无需每次都启动新 session ?

java - 如何在 CDI 环境中设置 Spring Data 的自定义行为

java - wildfly 9.0.0 读写方法之间的类型不匹配