Java 将实体的元素添加到同一个-@OneToMany
我将Java 将实体的元素添加到同一个-@OneToMany,java,json,arraylist,spring-data-jpa,entity,Java,Json,Arraylist,Spring Data Jpa,Entity,我将任务实体表示为: @Entity @Getter @NoArgsConstructor public class Task { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; @NotBlank private String name; @Enumerated(EnumType.STRING) private Category catego
任务
实体表示为:
@Entity
@Getter
@NoArgsConstructor
public class Task {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@NotBlank
private String name;
@Enumerated(EnumType.STRING)
private Category category;
@OneToOne
private Employee assignee;
@OneToMany
private List<Task> precedingTasks;
private String details;
private int estimatedTimeInMinutes;
private LocalDateTime deadline;
private LocalDateTime creationTime;
private LocalDateTime startTime;
private LocalDateTime endTime;
public Task(String name, Category category, Employee assignee, List<Task> precedingTasks, String details,
int estimatedTimeInMinutes, LocalDateTime deadline) {
this.name = name;
this.category = category;
this.assignee = assignee;
this.precedingTasks = precedingTasks;
this.details = details;
this.estimatedTimeInMinutes = estimatedTimeInMinutes;
this.deadline = deadline;
this.creationTime = LocalDateTime.now();
this.startTime = null;
this.endTime = null;
}
但是我得到的任务没有前面的任务:
{
"id": 4,
"name": "Wyslac przesyłke nr 87",
"category": "TODO",
"assignee": {
"id": 1,
"firstName": "Wojciech",
"lastName": "Wasilewski",
"email": "wojtek@wasilewski.pl",
"role": "ADMIN",
"password": "h*n$GvFE",
"manager": true,
"password_LENGTH": 8,
"passwordValid": false
},
"precedingTasks": [],
"details": "Dodac zakladke",
"estimatedTimeInMinutes": 78,
"deadline": "2013-12-18T14:30:40.1",
"creationTime": "2018-08-01T13:38:45.924",
"startTime": null,
"endTime": null
}
我使用这个控制器:
@PostMapping("/tasks")
@ResponseStatus(HttpStatus.CREATED)
public Task addNewTask(@RequestBody TaskRequest taskRequest) {
String name = taskRequest.getName();
Category category = taskRequest.getCategory();
checkIfAssigneeExists(taskRequest.getAssigneeId());
Employee assignee = employeeRepository.findById(taskRequest.getAssigneeId()).get();
List<Task> precedingTasks = new ArrayList<>();
if (taskRequest.getPrecedingTaskIds() != null)
taskRequest.getPrecedingTaskIds().forEach(id -> precedingTasks.add(taskRepository.findById(id).get()));
String details = taskRequest.getDetails();
int estimatedTimeInMinutes = taskRequest.getEstimatedTimeInMinutes();
LocalDateTime deadline = taskRequest.getDeadline();
Task task = new Task(name, category, assignee, precedingTasks, details, estimatedTimeInMinutes, deadline);
taskRepository.save(task);
return task;
}
@PostMapping(/tasks)
@ResponseStatus(HttpStatus.CREATED)
公共任务addNewTask(@RequestBody TaskRequest TaskRequest){
字符串名称=taskRequest.getName();
Category Category=taskRequest.getCategory();
检查Ifassigneexists(taskRequest.getAssigneeId());
Employee assignee=employeeRepository.findById(taskRequest.getAssigneeId()).get();
List PredingTasks=new ArrayList();
if(taskRequest.GetPrecedingTaskId()!=null)
taskRequest.getPrecedingTaskId().forEach(id->precedingTasks.add(taskRepository.findById(id.get());
String details=taskRequest.getDetails();
int estimatedTimeInMinutes=taskRequest.getEstimatedTimeInMinutes();
LocalDateTime deadline=taskRequest.getDeadline();
任务任务=新任务(名称、类别、受让人、继续执行的任务、详细信息、估计时间(分钟)、截止日期);
taskRepository.save(任务);
返回任务;
}
以及该项要求:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class TaskRequest {
@NonNull
private String name;
@NonNull
private Category category;
@NonNull
private Long assigneeId;
@NonNull
private List<Long> precedingTaskIds;
private String details;
private int estimatedTimeInMinutes;
@NonNull
private LocalDateTime deadline;
}
@数据
@诺尔格构装师
@AllArgsConstructor
公共类任务请求{
@非空
私有字符串名称;
@非空
私人类别;
@非空
私人长期转让ID;
@非空
任务ID的私有列表;
私有字符串详细信息;
私人int估计时间(分钟);
@非空
私有LocalDateTime截止日期;
}
怎么了?CONTORLER,或JSON中ArrayList的格式?在添加整个任务之前,我是否应该向数据库中添加precedingTasks
?类TaskRequest中的字段precedingTaskIds与POST请求precedingTasksId中的字段名称不对应。重命名它或在Postman中重写POST。类TaskRequest中的字段PredingTaskId与POST请求PredingTaskSID中的字段名称不对应。重命名它或在Postman中重写POST。您发布了“precingtasksid”,但类需要“precingtasksid”
看起来这只是个打字错误
让我知道这是否有效。您发布了“precingtasksid”,但类需要“precingtasksid”
看起来这只是个打字错误
如果有效,请告诉我。您需要添加级联类型
@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
onprecedingTasks@pvpkiran感谢您的回复,但结果仍然相同:/n您需要添加CascadeType@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
onprecedingTasks@pvpkiran感谢您的回复,但结果仍然是一样的:/这可以解释为什么考试通过:)非常感谢!这就解释了为什么考试通过了:)非常感谢!是的,我以前没注意到。谢谢你的帮助,但马克西姆更快地得到了“最佳答案”;)哈哈。没问题。我没有看到他的答案。很高兴你得到了答案。:)是的,我以前没注意到。谢谢你的帮助,但马克西姆更快地得到了“最佳答案”;)哈哈。没问题。我没有看到他的答案。很高兴你得到了答案。:)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class TaskRequest {
@NonNull
private String name;
@NonNull
private Category category;
@NonNull
private Long assigneeId;
@NonNull
private List<Long> precedingTaskIds;
private String details;
private int estimatedTimeInMinutes;
@NonNull
private LocalDateTime deadline;
}