Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

OnDelete (プロパティ・キーワード)

関連するオブジェクトが削除されたときに、現在のテーブルで実行するアクションを指定します。このキーワードは、CardinalityParent または One として指定するリレーションシップ・プロパティにのみ適用されます。その他すべてのコンテキストでの使用は無効です。

使用法

関連するオブジェクトが削除されたときに、現在のテーブルで実行するアクションを指定するには、以下の構文を使用します。

Relationship relname As classname [ Cardinality = cardinality, Inverse = inverse, OnDelete = ondelete ];

ondelete は以下のいずれかの値になります。この説明では、関連するレコードはリレーションシップの相手側に属するレコードまたはオブジェクトであり、参照元レコードはリレーションシップのこちら側にあるレコードまたはオブジェクトです。

  • cascade — 関連するレコードを削除した場合、このテーブル内の参照元レコードも削除されます。

  • noaction — 関連するレコードの削除を試みた場合、失敗します。

  • setdefault — 関連するレコードを削除した場合、このテーブル内の参照元レコードはその既定値に設定されます。

  • setnull — 関連するレコードを削除した場合、このテーブル内の参照元レコードは NULL に設定されます。

詳細

このキーワードは、リレーションシップの相手側でレコードが削除されたときに発生する参照アクションを定義します。

既定値

このキーワードを省略すると、以下のようになります。

  • Parent である Cardinality とのリレーションシップの場合、OnDelete は cascade です。つまり、親レコードを削除する場合、既定では、関連する子レコードが削除されます。

  • One である Cardinality とのリレーションシップの場合、OnDelete は noaction です。つまり、“1” レコードの削除を試みた場合、既定ではそれを指すレコードが相手のテーブルにあれば失敗します。

Class MyApp.Employee Extends %Persistent {  
...
Relationship Employer As MyApp.Company [ Cardinality = one, Inverse = Employees, OnDelete = cascade ];
}

この例は、会社 (company) と従業員 (employee) との間の一対多リレーションシップを示しています。ここに示すように、Cardinality は、会社がリレーションシップの “One” の側であることを示す一方で、OnDelete は、会社を削除した場合の従業員への効果を示します。OnDelete の値は cascade であるため、会社を削除すると、その効果がカスケードされて従業員も削除されます。

OnDelete の値が noaction (一対多のリレーションシップの既定値) である場合、その会社を雇用主とする従業員がいると、会社を削除することはできません。

OnDelete の値が setnull または setdefault の場合、会社を削除すると、従業員の雇用主が NULL に設定されます。

関連項目

FeedbackOpens in a new tab