首页 > 解决方案 > 如何使用 JSON 格式发布 ManyToOne 实体

问题描述

我有两个实体issueuser我想将用户分配给一个问题,但是当尝试使用它来执行此操作JSONuser_idissues表中的NULL.

@Data
@Entity
@Table(name = "issues")
public class Issue {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column
    private String number;
    @Column
    private String title;
    @Column
    private String description;
    @Column
    @Enumerated(EnumType.STRING)
    private State state;
    @JsonIgnore
    @CreationTimestamp
    @Column
    private Timestamp createDate;
    @JsonIgnore
    @UpdateTimestamp
    @Column
    private Timestamp modifyDate;
    @ManyToOne(targetEntity = User.class)
    @JoinColumn
    private User user;

    public Issue() {

    }
@Data
@Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column
    private String fullName;
    @Column
    private String username;
    @Column
    private String email;
    @Column
    private String password;
    @Column
    @Enumerated(EnumType.STRING)
    private Role role;
    @JsonIgnore
    @CreationTimestamp
    @Column
    private Timestamp createDate;
    @JsonIgnore
    @UpdateTimestamp
    @Column
    private Timestamp modifyDate;

    public User() {

    }

    public User(String fullName, String username, String email, String password, Role role) {
        this.fullName = fullName;
        this.username = username;
        this.email = email;
        this.password = password;
        this.role = role;
    }

首先,我创建了一个没有任何问题的用户,但不知道如何解决这里的问题是我通过邮递员使用的 JSON。

{
    "number": "3",
    "title": "Create an working service",
    "description": "The problem is that we do not have an working service.",
    "state": "NEW",
    "user_id": "1"
}

这部分负责保存问题。

    public void save(Issue issue) {
        if (issue == null)
            return;
        Issue actual = issueRepository.findByNumber(issue.getNumber());
        if (actual != null) {
            actual.setNumber(issue.getNumber());
            actual.setTitle(issue.getTitle());
            actual.setDescription(issue.getDescription());
            actual.setState(issue.getState());
            actual.setUser(issue.getUser());
            issueRepository.save(actual);
        } else {
            issueRepository.save(issue);
        }
    }

在控制器中,我只有@Valid @RequestBody 问题,服务保存了问题。

标签: jsonspring-bootjpa

解决方案


你需要像这样发布json。

{
    "number": "3",
    "title": "Create an working service",
    "description": "The problem is that we do not have an working service.",
    "state": "NEW",
    "user":{
         "id":1
     }
}

这里的问题有用户的加入列,所以对于用户实体,你必须传递用户 ID。您的保存将是这样的。

 public void save(Issue issue) {
        if (issue == null)
            return;
        Issue actual = issueRepository.findByNumber(issue.getNumber());
        if (actual != null) {
            actual.setNumber(issue.getNumber());
            actual.setTitle(issue.getTitle());
            actual.setDescription(issue.getDescription());
            actual.setState(issue.getState());
            actual.setUser(userRepositoy.findById(issue.getUser().getId()));
            issueRepository.save(actual);
        } else {
            issueRepository.save(issue);
        }
    }

推荐阅读