0

2 つのテーブル (Patient と Study) の間に多対 1 の関係があります。患者が削除されると、彼の研究もすべて削除されると思います。hbm.xmlファイル内の関連する行は次のとおりです。

<class name="Study" table="Studies">
        <id name="Uid">
            <generator class="guid"/>
        </id>
        <many-to-one name="Patient" class="Patient" column="PatientId" lazy="false" cascade="all"/>
</class>

と:

<class name="Patient" table="Patients">
    <id name="Uid">
      <generator class="guid"/>
    </id>
    <property name="PatientId"/>
    <property name="Name" />
</class>

NHibernate 3.3.1MySQL サーバーを使用しています。設定することで、 MySQLワークベンチで FK オプションが に設定されることcascade=allを期待していますが、代わりに に設定されています。(ワークベンチを介して)手動で変更すると、すべて正常に動作します。自動的に設定する方法はありますか?hbm.xmlファイルにも設定を試みましたが、うまくいきませんでした。On DeleteCASCADERESTRICTCASCADECASCADEon-delete=cascade

助言がありますか?

4

1 に答える 1

0

まず、親が削除されたときに子を自動削除する構文は...

  • cascade="all-delete-orphan"(すべて削除と孤立削除の両方が必要な場合)。NHibernateは、メモリ内の子をトラバースして削除します。

また

  • on-delete="cascade" キーに。子の削除はdb側で発生します。

ただし、あなたの場合、many-to-oneマッピングでこれを実行しようとします。これは不可能だと思います。AFAIK-これはone-to-manyマッピングにのみ適用されます。

これを修正するには

  • スクリプトを手動で追加して、dbレベルで削除のカスケードを追加できます(すでに実行済み)

また

  • 関係を双方向に変更します
于 2012-10-31T10:19:42.593 に答える