У меня проблема с отношением Spring Boot. Проблема возникает, когда метод create возвращает метод read (NullPointerException), поскольку он не может получить доступ к методу из объекта, который находится в отношении один к одному с классом проекта (project.getColors (). GetValue ()).
package Main.Controller;
import Main.Model.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/project")
public class ProjectController {
@Autowired
private ProjectRepository projectRepository;
@RequestMapping(path = "/create", method = RequestMethod.POST)
@ResponseBody
public Object create(@RequestBody CreateProjectObject object) {
Project project=new Project();
project.setName(object.getName());
project.setColor(object.getValue());
projectRepository.save(project);
return this.read();
}
@RequestMapping(path = "/read", method = RequestMethod.GET)
@ResponseBody
public List<Map<String, Object>> read() {
List<Map<String, Object>> readProject = new ArrayList<>();
for (Project project: projectRepository.findAll()
) {
HashMap<String, Object> map = new HashMap<>();
map.put("value", project.getId());
map.put("color", project.getColors().getValue());// <--------
map.put("label", project.getName());
readProject.add(map);
}
return readProject;
}
Но дело в том, что метод read читает все другие проекты, которые были созданы ранее, без проблем. И если я вызываю этот метод несколько секунд спустя, он читает те же проекты, которые не мог прочитать несколько мгновений назад.
Вот модель проекта:
package Main.Model;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import javax.persistence.*;
import java.time.LocalDateTime;
import java.util.HashSet;
import java.util.Set;
import java.util.HashSet;
@Entity
@Table(name = "projects")
public class Project {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Integer id;
@Column
@CreationTimestamp
private LocalDateTime created_at;
@Column
@UpdateTimestamp
private LocalDateTime updated_at;
private String name;
private Integer color;
@OneToOne
@JoinColumn(name = "color", insertable = false, updatable = false)
private Color colors;
public Color getColors() {
return colors;
}
public void setColors(Color colors) {
this.colors = colors;
}
public Integer getId() {
return id;
}
public String getName() {
return name;
}
public Integer getColor() {
return color;
}
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setColor(Integer color) {
this.color = color;
}
}
РЕДАКТИРОВАТЬ: Вот класс цвета
package Main.Model;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import javax.persistence.*;
import java.time.LocalDateTime;
@Entity
@Table(name = "colors")
public class Color {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Integer id;
@Column
@CreationTimestamp
private LocalDateTime created_at;
@Column
@UpdateTimestamp
private LocalDateTime updated_at;
private String value;
public String getValue() {
return value;
}
public void setValue(String name) {
this.value = value;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}