0

我有两个表之间的多对一关系 - Patient 和 Study。当一个病人被删除时,我希望他的所有研究也将被删除。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 服务器。通过设置cascade=all,我希望在MySQL工作台中看到 FK 选项On Delete将设置为CASCADE,但它设置为RESTRICT。当我手动将其更改为CASCADE(通过工作台)时,一切正常。有没有办法将其设置为CASCADE自动?我也尝试on-delete=cascadehbm.xml文件中进行设置,但没有奏效。

有什么建议么?

4

1 回答 1

0

首先,删除父级时自动删除子级的语法是......

  • cascade="all-delete-orphan"(如果您想要全部删除和孤立删除)。NHibernate 会遍历内存中的孩子并删除它们。

或者

  • on-delete="cascade" 关键。子节点的删除将发生在 db 端。

但是,在您的情况下,您尝试在many-to-one映射上执行此操作。我不认为这是可能的。AFAIK - 这仅适用于one-to-many映射。

要解决这个问题

  • 您可以手动添加脚本以在数据库级别添加级联删除(您已经完成了)

或者

  • 将关系更改为双向
于 2012-10-31T10:19:42.593 回答