все, что я в настоящее время зарегистрирован в React / Spring Boot и у меня возникают проблемы с обнаружением ошибки, из-за которой моя дата обновления не срабатывает, когда я тестирую API с помощью почтальона. Ниже у меня есть два изображения вывода почтальона: первое, когда я создаю проект, оно правильно отображает дату create_At, второе - это попытка обновить проект, и оно работает отдельно от updated_At, кажется, никогда не обновляется и всегда пусто IN POSTMAN , Однако, когда я проверяю свою базу данных h2, в столбце updated_At указана дата обновления.
Вывод при создании проекта
Вывод при обновлении проекта
Консоль H2
Вот код, который у меня есть для моего бэкэнда
Project. java
import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.Date;
@Entity
public class Project {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank(message = "Project name is required")
private String projectName;
@NotBlank(message ="Project Identifier is required")
@Size(min=4, max=5, message = "Please use 4 to 5 characters")
@Column(updatable = false, unique = true)
private String projectIdentifier;
@NotBlank(message = "Project description is required")
private String description;
@JsonFormat(pattern = "yyyy-mm-dd")
private Date start_date;
@JsonFormat(pattern = "yyyy-mm-dd")
private Date end_date;
@JsonFormat(pattern = "yyyy-mm-dd")
@Column(updatable = false)
private Date created_At;
@JsonFormat(pattern = "yyyy-mm-dd")
private Date updated_At;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "project")
//
private Backlog backlog;
public Project() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public String getProjectIdentifier() {
return projectIdentifier;
}
public void setProjectIdentifier(String projectIdentifier) {
this.projectIdentifier = projectIdentifier;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Date getStart_date() {
return start_date;
}
public void setStart_date(Date start_date) {
this.start_date = start_date;
}
public Date getEnd_date() {
return end_date;
}
public void setEnd_date(Date end_date) {
this.end_date = end_date;
}
public Date getCreated_At() {
return created_At;
}
public void setCreated_At(Date created_At) {
this.created_At = created_At;
}
public Date getUpdated_At() {
return updated_At;
}
public void setUpdated_At(Date updated_At) {
this.updated_At = updated_At;
}
public Backlog getBacklog() {
return backlog;
}
public void setBacklog(Backlog backlog) {
this.backlog = backlog;
}
@PrePersist
protected void onCreate(){
this.created_At = new Date();
}
@PreUpdate
protected void onUpdate(){
this.updated_At = new Date();
}
}
Журнал ожидания. java
import javax.persistence.*;
@Entity
public class Backlog {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Integer PTSequence = 0;
private String projectIdentifier;
//OneToOne with project
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name="project_id",nullable = false)
@JsonIgnore
private Project project;
//OneToMany projecttasks
public Backlog() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Integer getPTSequence() {
return PTSequence;
}
public void setPTSequence(Integer PTSequence) {
this.PTSequence = PTSequence;
}
public String getProjectIdentifier() {
return projectIdentifier;
}
public void setProjectIdentifier(String projectIdentifier) {
this.projectIdentifier = projectIdentifier;
}
public Project getProject() {
return project;
}
public void setProject(Project project) {
this.project = project;
}
}
ProjectService. java
public class ProjectService {
@Autowired
private ProjectRepository projectRepository;
@Autowired
private BacklogRepository backlogRepository;
public Project saveOrUpdateProject(Project project){
try{
project.setProjectIdentifier(project.getProjectIdentifier().toUpperCase());
if(project.getId()==null){
Backlog backlog = new Backlog();
project.setBacklog(backlog);
backlog.setProject(project);
backlog.setProjectIdentifier(project.getProjectIdentifier().toUpperCase());
}
if(project.getId()!=null){
project.setBacklog(backlogRepository.findByProjectIdentifier(project.getProjectIdentifier().toUpperCase()));
}
return projectRepository.save(project);
}catch (Exception e){
throw new ProjectIdException("Project ID '"+project.getProjectIdentifier().toUpperCase()+"' already exists");
}
}
public Project findProjectByIdentifier(String projectId){
Project project = projectRepository.findByProjectIdentifier(projectId.toUpperCase());
if(project == null){
throw new ProjectIdException("Project ID '"+projectId+"' does not exist");
}
return project;
}
public Iterable<Project> findAllProjects(){
return projectRepository.findAll();
}
public void deleteProjectByIdentifier(String projectid){
Project project = projectRepository.findByProjectIdentifier(projectid.toUpperCase());
if(project == null){
throw new ProjectIdException("Cannot Project with ID '"+projectid+"'. This project does not exist");
}
projectRepository.delete(project);
}
}
ProjectController. java
@RequestMapping("/api/project")
@CrossOrigin
public class ProjectController {
// This is our controller
@Autowired
private ProjectService projectService;
@Autowired
private MapValidationErrorService mapValidationErrorService;
@PostMapping("")
public ResponseEntity<?> createNewProject(@Valid @RequestBody Project project, BindingResult result){
ResponseEntity<?> errorMap = mapValidationErrorService.MapValidationService(result);
if(errorMap != null) return errorMap;
Project project1 = projectService.saveOrUpdateProject(project);
return new ResponseEntity<Project>(project, HttpStatus.CREATED);
}
@GetMapping("/{projectId}")
public ResponseEntity<?> getProjectById(@PathVariable String projectId) {
Project project = projectService.findProjectByIdentifier(projectId);
return new ResponseEntity<Project>(project, HttpStatus.OK);
}
@GetMapping("/all")
public Iterable<Project> getAllProjects(){return projectService.findAllProjects();}
@DeleteMapping("/{projectId}")
public ResponseEntity<?> deleteProject(@PathVariable String projectId) {
projectService.deleteProjectByIdentifier(projectId);
return new ResponseEntity<String>("Project '"+projectId+"' was deleted", HttpStatus.OK);
}
}
ProjectTask. java
import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import java.util.Date;
@Entity
public class ProjectTask {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(updatable = false)
private String projectSequence;
@NotBlank(message = "Please include a project summary")
private String summary;
private String acceptanceCriteria;
private String status;
private Integer priority;
private Date dueDate;
//ManyToOne with Backlog
@Column(updatable = false)
private String projectIdentifer;
private Date create_At;
private Date update_At;
public ProjectTask() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getProjectSequence() {
return projectSequence;
}
public void setProjectSequence(String projectSequence) {
this.projectSequence = projectSequence;
}
public String getSummary() {
return summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
public String getAcceptanceCriteria() {
return acceptanceCriteria;
}
public void setAcceptanceCriteria(String acceptanceCriteria) {
this.acceptanceCriteria = acceptanceCriteria;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Integer getPriority() {
return priority;
}
public void setPriority(Integer priority) {
this.priority = priority;
}
public Date getDueDate() {
return dueDate;
}
public void setDueDate(Date dueDate) {
this.dueDate = dueDate;
}
public String getProjectIdentifer() {
return projectIdentifer;
}
public void setProjectIdentifer(String projectIdentifer) {
this.projectIdentifer = projectIdentifer;
}
public Date getCreate_At() {
return create_At;
}
public void setCreate_At(Date create_At) {
this.create_At = create_At;
}
public Date getUpdate_At() {
return update_At;
}
public void setUpdate_At(Date update_At) {
this.update_At = update_At;
}
@PrePersist
protected void onCreate(){
this.create_At = new Date();
}
@PreUpdate
protected void onUpdate(){
this.update_At = new Date();
}
@Override
public String toString() {
return "ProjectTask{" +
"id=" + id +
", projectSequence='" + projectSequence + '\'' +
", summary='" + summary + '\'' +
", acceptanceCriteria='" + acceptanceCriteria + '\'' +
", status='" + status + '\'' +
", priority=" + priority +
", dueDate=" + dueDate +
", projectIdentifer='" + projectIdentifer + '\'' +
", create_At=" + create_At +
", update_At=" + update_At +
'}';
}
}