2017-06-28 1 views
1

最新のSpring Data REST(JPAとMySQL DB)プロジェクトを使用しています。私は2つのオブジェクトを持っています。しかし、私が2つのうちの1つを削除すると、削除要求(両方のオブジェクトではない)を受け取ったオブジェクトとリレーションシップを削除したいだけです。SpringデータRESTで多対多リレーションシップを設定すると、あるオブジェクトを削除しても他のオブジェクトは削除されません。

私が関係しています:

  • タスク
  • タスクが複数のユーザー(「により所有」)に関連することができ、ユーザーが関連することができ、ユーザ

@ManyToMany 
@JoinTable(name = "task_user", joinColumns = @JoinColumn(name = "task_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id")) 
private Set<User> users; 
:( "自身")複数のタスク

タスククラスへ

Userクラス:

@ManyToMany(mappedBy = "users") 
private Set<Task> tasks; 

task_userテーブルは、2つの列

  • TASK_ID(タスクID)
  • USER_ID(ユーザのID)
から成り

タスクを(/タスク/ {id}へのDELETEを介して)削除すると、正しく動作します(タスクはタスクテーブルから削除され、その関係はtask_use rテーブル)。私が持っている問題は、ユーザーを削除するとユーザーテーブルから削除されますが、関係はまだtask_userテーブルに存在するということです。私が望む何

タスクを削除する
  • 、「task_user」と「タスク」のエントリに対応するすべてのエントリを削除します。 "user"のエントリを削除しません。
  • ユーザを削除すると、 "task_user"の対応するエントリと "user"のエントリがすべて削除されます。 「タスク」のエントリを削除しません

これで設定を完了することは可能ですか?または、イベントハンドラなどの外部キーまたはカスタムロジックを使用する必要がありますか?

答えて

0

これを試してみてください:

public class User { 
    //... 
    @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) 
    private Set<Task> tasks; 
    //... 
} 

public class Task { 
    //... 
    @ManyToMany(mappedBy = "tasks") 
    private Set<User> users; 
    //... 
} 

あなたは、多対多そうUserクラスの「ヘルパー・メソッド」を忘れないでくださいの双方向のバリアントを選択しました。ドキュメント: associations many-to-manyを参照してください。

私のexampleおよびtestsを参照してください。

+0

ありがとう!カスケードは私が必要なものです。 – RestfulSunshine

0

テーブルの外部キーuser_idのカスケードタイプをカスケード削除に変更する必要があります。例:IntelliJ組み込みデータベースツールを使用: enter image description here

関連する問題