<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>
和class statistique的hbm文件是:
<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>
如果statistiques列表为空,这似乎工作正常。它因外键违规错误而失败:
完整性约束违规FKD18D3C4EDC6F4BFB表:语句中的STATISTIQUE [从INSTANCE_Monitor中删除(ID_INSTANCE)IN(从HT_INSTANCE_Monitor中选择ID_INSTANCE)]
答案 0 :(得分:1)
您可能在数据库中有一个约束,它要求statistique中的每一行都存在instance_monitor中的行。在删除instance_monitor中的行之前,必须删除statistique中的相关行。
子句cascade="all"
并不意味着在数据库级别上进行级联删除。它只是强制hibernate为子表生成显式删除语句(在你的情况下为statistique
)。问题是,删除语句可能以与数据库约束不兼容的顺序到达。这也可能是由于hibernate重新排序数据库语句而发生的。
您可以做什么:删除数据库约束(如果可能)或
答案 1 :(得分:0)
如果statistiques列表为空,这似乎工作正常。它 因外键违规错误而失败:
您似乎未在数据库级别启用级联删除。