0

    <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>

クラス統計の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>

統計リストが空の場合、これは正常に機能しているようです。外部キー違反エラーで失敗します:

整合性制約違反 FKD18D3C4EDC6F4BFB テーブル: ステートメントの STATISTIQUE [INSTANCE_Monitor から削除 (ID_INSTANCE) IN (HT_INSTANCE_Monitor から ID_INSTANCE を選択)]

4

2 に答える 2

1

データベースには、statistique のすべての行に対して instance_monitor の行の存在を要求する制約がある可能性があります。instance_monitor で行を削除する前に、statistique で関連する行を削除する必要があります。

この句cascade="all"は、データベース レベルでのカスケード削除を意味するものではありません。休止状態に子テーブルの明示的な削除ステートメントを生成させるだけです(statistiqueあなたの場合)。問題は、データベースの制約と互換性のない順序で削除ステートメントが到着する可能性があることです。これは、休止状態のデータベース ステートメントの並べ替えが原因で発生することもあります。

できること: データベースの制約を削除する (可能であれば) または

  1. instance_monitor に属する統計テーブルから行を「手動で (つまり、個別の delete ステートメントを使用して) 削除します。
  2. session.flush() を呼び出します (休止状態によるステートメントの並べ替えを防ぎます)
  3. instance_monitor を削除します
于 2012-05-15T13:46:11.167 に答える
0

統計リストが空の場合、これは正常に機能しているようです。外部キー違反エラーで失敗します:

データベース レベルでカスケード削除を有効にしていないようです。

于 2012-05-15T10:35:00.473 に答える