2010-12-17 10 views
2

私はクラス "Character"とクラス "Faction"を持っています。キャラクターには派閥があります。派閥は多くの文字で使用できます。キャラクターが永続化されると、派閥は維持されます。派閥を参照しているキャラクターがもういない場合、私はそれをデータベースから削除したい。私が1だった場合はjdoでもう参照されていないときにデータベースからオブジェクトを削除するには? (n:1の関係)

は:1の関係を、私はちょうどそれはもはや必要いないとき、それは削除することを

@Persistent(dependent = "true") 

を使用することができますので、それは簡単でした。しかし、それはもはや可能ではありません。なぜなら、現在、派閥を必要とする別のキャラクターがいる可能性があるからです。

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. 

私はこれ以上の文字がそれを必要とされていないときの派閥を削除したい:私はCHARACTER1を削除しようとすると、彼はCHARACTER2と同じ派閥を使っているのであれば、私は次の例外を取得します。どうやってやるの?

+0

"Fraction"のメンバーとして "Character"を保持することはできますか? 「分数」に「文字」のリストが表示されます。したがって、「分数」にそれ以上の「文字」がないことを知り、それを削除することができます。また、「キャラクター」を問題なく削除することができます。 –

答えて

1

ベストソリューションは、Javaではなく、データベース自体に存在すると考えています。あなたは現在のレコード(削除されているもの)を取るON DELETEトリガーをCharacterに置いて、その 'Faction'を検索して、同じFactionを参照する他のレコードのCharacterテーブルをチェックします。その派閥を参照する他のレコードが存在する場合は、何もしないでください。そのファクションを参照している他のレコードが存在しない場合は、そのファクションを削除します。

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

関連する問題