Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OnDelete级联失败,出现约束冲突错误()Hibernate_Java_Hibernate - Fatal编程技术网

Java OnDelete级联失败,出现约束冲突错误()Hibernate

Java OnDelete级联失败,出现约束冲突错误()Hibernate,java,hibernate,Java,Hibernate,statistique类的hbm文件为: <id name="idInstance" type="java.lang.Integer"> <column name="ID_INSTANCE" /> <generator class="native" /> </id> <property name="nom" type="string"> <column n

statistique类的hbm文件为:

    <id name="idInstance" type="java.lang.Integer">
        <column name="ID_INSTANCE" />
        <generator class="native" />
    </id>


    <property name="nom" type="string">
        <column name="NOM" length="50" not-null="true" />
    </property>

            <property name="description" type="string">
        <column name="DESCRIPTION" length="300" not-null="true" />
    </property>

    <set name="statistiques" cascade="all" lazy="false">
        <key column="ID_INSTANCE"></key>
        <one-to-many class="Statistique" />
    </set>
        </class>
如果statistiques列表是空的,那么这似乎可以正常工作。它失败,出现外键冲突错误:

完整性约束冲突FKD18D3C4EDC6F4BFB表:语句中的STATISTIQUE[从实例\u监视器中删除,其中从HT\u实例\u监视器中选择ID\u实例中的ID\u实例]

如果statistiques列表是空的,那么这似乎可以正常工作。信息技术 失败,出现外键冲突错误:


您似乎没有在数据库级别启用级联删除。

您可能在数据库中有一个约束,它要求statistique中的每一行都在instance\u monitor中存在该行。在删除instance_monitor中的行之前,必须先删除statistique中的相关行

子句cascade=all并不意味着在数据库级别进行级联删除。它只是强制hibernate为您案例中的子表statistique生成显式的delete语句。问题是,delete语句的到达顺序可能与数据库约束不兼容。由于hibernate对数据库语句重新排序,也可能发生这种情况

您可以做的是:如果可能,删除数据库约束,或者

从statistique表中删除属于实例i的行。E使用单独的delete语句 Call session.flush防止hibernate对语句重新排序 删除实例\u监视器
如何使用hibernate来实现这一点因为我正在使用SchemaExport抱歉正在忙于其他事情。我试图找到hibernate的级联删除配置,但我不完全知道如何做到这一点。可能这个链接会有帮助-我没有找到解决方案,我使用cascade=all that mean=保存升级和删除,但我不知道为什么它不起作用!!只需检查生成的数据库表的ddl即可。。它有新的层叠约束吗?我检查过了,他没有包含层叠约束!!im使用hibernate 3.2.6和Mysql Innodb
<class name="Statistique" table="STATISTIQUE">

    <id name="idStatistique" type="java.lang.Integer">
        <column name="ID_STATISTIQUE"/>
        <generator class="native" />
    </id>

    <property name="tempsReponse" type="java.lang.Double">
        <column name="TEMPS_REPONSE"/>
    </property>

    <property name="date" type="timestamp">
        <column name="DATE"/>
    </property>

</class>