2

クラス「キャラクター」とクラス「派閥」があります。キャラクターには派閥があります。派閥は多くのキャラクターが使用できます。キャラクターが永続化されると、派閥が永続化されます。派閥を参照するキャラクターがなくなったら、データベースから削除したいと思います。

1対1の関係だった時は、そのまま使えるから楽だった

@Persistent(dependent = "true")

不要になったときに削除します。しかし、別のキャラクターがまだファクションを必要としている可能性があるため、それはもはや不可能です。したがって、character1 を削除しようとして、彼が character2 と同じ派閥を使用している場合、次の例外が発生します。

java.sql.SQLIntegrityConstraintViolationException: DELETE on table 'FACTION' caused a violation of foreign key constraint 'CHARACTER_FK1' for key (1).  The statement has been rolled back.

派閥を必要とするキャラクターがなくなったときにのみ派閥を削除したい. どうやってやるの?

4

1 に答える 1

1

最善の解決策は、Java ではなく、データベース自体にあると考えています。現在のレコード (削除されるレコード) を取得する ON DELETE トリガーを Character に配置し、その派閥を検索してから、Character テーブルで同じ派閥を参照する他のレコードを確認します。その派閥を参照する他のレコードが存在する場合、何もしません。その派閥を参照する他のレコードが存在しない場合は、その派閥を削除します。

データベース サーバーでこれを行うことができない場合は、代わりにコードで上記と同じことを簡単に行うことができます。データベースに直接配置する利点は、ユーザーとデータの間に中間コード層がいくつあるかに関係なく、ルールが常に適用される 1 つの場所で定義されていることです。

于 2010-12-17T15:02:06.787 に答える