java - 在 Spring Data REST 中配置多对多关系,以便删除一个对象不会删除另一个对象

标签 java jpa spring-data spring-data-jpa spring-data-rest

我正在使用最新的 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 .

查看我的exampletests .

关于java - 在 Spring Data REST 中配置多对多关系,以便删除一个对象不会删除另一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44811278/

相关文章:

java - 在内部框架中绘制二维圆

java - 使用构建器模式扩展类

java - 如何在JPA中生成sql?

java - 使用 Hibernate/Spring 生成数据库更新脚本

java - 字段更改的 Hibernate 审计日志

java - Spring 数据 : JPA repository findAll() to return *Map instead of List?

java - Spring Data REST 重写 findBy* 方法

java - 通过 Fitnesse 测试第三方 API

java - 将整数分钟转换为字符串 "hh:mm"

java - 实体间的优化关系