在 Spring Data REST 中配置多对多关系,因此删除一个对象不会删除另一个

Configure many-to-many relationships in Spring Data REST so deleting one object does not delete the other

我正在使用最新的 Spring Data REST(使用 JPA 和 MySQL DB)项目。我有两个对象,我想在它们之间建立关系。但是当我删除两者之一时,我只想删除关系和收到删除请求的对象(不是两个对象)。

我要说的是:

一个任务可以与 ("owned by") 个多个用户相关,一个用户可以与 ("own") 个多个任务相关

任务Class:

@ManyToMany
@JoinTable(name = "task_user", joinColumns = @JoinColumn(name = "task_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"))
private Set<User> users;

用户class:

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

task_usertable由两列组成

当我删除任务时(通过 DELETE 到 /task/{id}),它的行为正确(任务从任务 table 中删除,关系从 task_user 中删除table)。我遇到的问题是,当我删除用户时,它会从用户 table 中删除,但关系仍然存在于 task_user table.

我想要的:

是否可以通过配置实现?或者我是否需要使用外键或自定义逻辑,例如事件处理程序?

试试这个:

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

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

您选择了多对多的双向变体,所以不要忘记用户 class 中的 'helper methods'。请参阅文档:associations many-to-many.

看我的example and tests

您需要将 table task_user 的外键 user_id 的级联类型更改为级联删除。例如使用 IntelliJ 内置的数据库工具: