19

さまざまな外部キー制約を持つ Hibernate によって管理されるいくつかのテーブルがあります。Cascade on delete は現在、Hibernate だけで管理されています。テスト データをいじるために、手動でいくつかの行を作成および削除することがよくあります。ON DELETE CASCADE を外部キー制約に追加できれば大いに役立ちますが、Hibernate が Hibernate よりも前にデータを削除するため、Hibernate がこれをトリップするかどうかはわかりません。


多くの人が DDL に集中しているようです。私の意図は、SQL DELETE CASCADES で DDL を作成するように Hibernate に指示することではありません。データベースでON DELETE CASCADE を指定した場合に害があるかどうかを知りたいだけです。cascade = CascadeType.REMOVEたとえば、参照注釈にJPA があり@ManyToOneます。

4

7 に答える 7

5

を使用できますがCascadeType.DELETE、この注釈は 内のオブジェクトにのみ適用されEntityManager、データベースには適用されません。ON DELETE CASCADEがデータベースの制約に追加されていることを確認する必要があります。確認するには、JPA を構成して ddl ファイルを生成できます。ddlファイルを見ると、それON DELETE CASCADEが制約の一部ではないことがわかります。ON DELETE CASCADEファイル内の実際の SQL に追加しddl、ddl からデータベース スキーマを更新します。これで問題が解決します。

このリンクは、MySQLON DELETE CASCADEで on forを使用する方法を示しています。CONSTRAINT制約に対してこれを行います。CREATE TABLEorALTER TABLEステートメントでも実行できます。JPA がALTER TABLEステートメントで制約を作成する可能性があります。ON DELETE CASCADEそのステートメントに追加するだけです。

一部の JPA 実装者は、この機能の手段を提供していることに注意してください。

Hibernate は@OnDeleteアノテーションを使用してこの機能を提供します。したがって、標準の JPA 機能に固執する場合は、これを使用するか、単に ddl ファイルを更新することをお勧めします。

于 2013-10-30T17:17:30.257 に答える
0

ネイティブ データベース機能を使用して、親レコードの削除時に子レコードを削除できます。

双方向の関係に注意してください。確実に、挿入と更新をカスケードで指定するだけにしてください (安全のために)。

于 2013-10-30T18:08:37.540 に答える