我正在使用最新的 Spring Data REST(带有 JPA 和 MySQL DB)项目。我有两个对象,我想在它们之间建立关系。但是当我删除两者之一时,我只想删除关系和收到删除请求的对象(而不是两个对象)。
我所涉及的内容:
- 一项任务
- 用户
其中一个任务可以与多个用户相关(“拥有”),并且一个用户可以与多个任务相关(“拥有”)
任务类别:
@ManyToMany
@JoinTable(name = "task_user", joinColumns = @JoinColumn(name = "task_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"))
private Set<User> users;
用户类别:
@ManyToMany(mappedBy = "users")
private Set<Task> tasks;
task_user 表由两列组成
- task_id(任务 ID)
- user_id(用户 ID)
当我删除任务(通过 DELETE 到/task/{id})时,它的行为正确(任务从任务表中删除,关系从 task_user 表中删除)。我遇到的问题是,当我删除用户时,它会从 user 表中删除,但关系仍然存在于 task_user 表中。
我想要什么:
- 删除任务,删除“task_user”中所有对应条目以及“task”中的条目;不删除“用户”中的条目
- 删除用户,删除“task_user”中所有对应条目以及“user”中的条目;不删除“任务”中的条目
是否可以通过配置来实现?或者我是否需要使用外键或自定义逻辑,例如事件处理程序?
最佳答案
试试这个:
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 .
关于java - 在 Spring Data REST 中配置多对多关系,以便删除一个对象不会删除另一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44811278/