json - 如何使用 JSON 格式发布 ManyToOne 实体
问题描述
我有两个实体issue
,user
我想将用户分配给一个问题,但是当尝试使用它来执行此操作JSON
时user_id
,issues
表中的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 问题,服务保存了问题。
解决方案
你需要像这样发布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);
}
}
推荐阅读
- javascript - JSON对象上的条件查询仅JavaScript浏览器没有后端?
- javascript - 如何将参数传递给获取请求
- makefile - 如果文件已更改,请重新制作文件
- python - 按设备名称分组,然后取平均值
- react-native - 如何播放带有反应原生视频的视频并在平面列表中暂停其他视频
- r - 如何在循环R中引用列的位置
- wordpress - 如何将除主页以外的所有页面重定向到登录/注册
- ssis - SSIS执行sql语句多步骤
- java - 如果项目具有未在提供的 POJO 中定义的列,DynamoDBMapper.batchLoad 将返回什么?
- powershell - 根据文件夹名称将文件夹的内容上移一级