首页 > 解决方案 > 使用 Spring Data JPA 在多对多关系中的所有者/子 JSON 数据的良好模式是什么?

问题描述

我是 Spring 新手,我正在尝试与 Hibernate 一起学习它。

我有一种情况,我拥有实体,Users并且Tasks它们之间存在多对多关系。我已经能够使用以下类在 Spring 中实现这一点,

public class User {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private long id;

  private String name;

  @Column(name = "username", unique = true, nullable = false)
  private String username;

  private String profile_url;
  private String email;

  @JsonIgnore
  @ManyToMany(cascade = CascadeType.ALL)
  @JoinTable(
    name = "user_tasks",
    joinColumns = {
      @JoinColumn(name = "user_id")
    },
    inverseJoinColumns = {
      @JoinColumn(name = "task_id")
    }
  )
  private Set<Task> tasks = new HashSet<>();
}

public class Task {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private long id;

  private String title;
  private String description;

  private double storyPoints;

  @CreationTimestamp
  private Instant creationTimestamp;

  @UpdateTimestamp
  private Instant updateTimestamp;

  @ManyToMany(mappedBy = "tasks", cascade = CascadeType.ALL)
  private Set<User> users = new HashSet<>();
}

我已经尝试了很多东西,但我似乎无法理解如何在我users的.json 文件中插入taskjson Controller。当我POST/api/users/我应该能够使用这种JSON格式时,

{
    "name": "Hardworking Employee",
    "username": "employee",
    "email": "employee@company.com",
    "profile_url": "https://profile.pic",
}

这完美地工作。当我POST到时api/tasks/,理想情况下我想按照这些方式发送一些东西

{
    "title": "Do this also",
    "description": "Let's try to do this now",
    "storyPoints": 1.25,
    "users": [
        "employee"
    ]
}

users映射到 Arrayusernamesids. 但是,这不会正确注册杰克逊很可能期望数组Users,并且没有User只有一个的构造函数String。但即使存在,也无法找到正确的用户,因为必须在model关卡中创建此构造函数。

一般来说,我想知道解决这个问题的好模式是什么?我应该在控制器上添加额外的逻辑吗?谁能引导我走上正义之路。

标签: javamysqlspringhibernatespring-data

解决方案


推荐阅读