我不知道如何通过api解决500状态响应。我正在与邮递员进行测试。
请求
{
"nome": "Ciencia da Computação",
"totalCreditos": 2333,
"professor": {
"id": 2,
"matricula": 0,
"nome": "José da silva"
}
}
如何实现一对多关系并以正确的方式公开API以进行CRUD操作。 我遇到500错误。 我不知道是否需要更改Controller功能
CursoController.java
@CrossOrigin(origins = "*")
@RestController
@RequestMapping({"/api/curso"})
public class CursoController {
@Autowired
private CursoService cursoService;
private ProfessorService professorService;
@PostMapping
public Curso create(@RequestBody Curso curso){
return cursoService.create(curso);
}
@GetMapping(path = {"/{id}"})
public Curso findOne(@PathVariable("id") int id){
return cursoService.findById(id);
}
@PutMapping
public Curso update(@RequestBody Curso Curso){
return cursoService.update(Curso);
}
@DeleteMapping(path ={"/{id}"})
public Curso delete(@PathVariable("id") int id) {
return cursoService.delete(id);
}
@GetMapping
public List findAll(){
return cursoService.findAll();
}
}
Curso.java
@Entity
@Table(name = "curso")
public class Curso implements Serializable {
@Id
@Column
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column
@GeneratedValue(strategy = GenerationType.AUTO)
private Long codigo;
@Column
private Long totalCreditos;
@Column
private String nome;
@ManyToOne(fetch = FetchType.LAZY, optional = false, cascade =
CascadeType.PERSIST)
@JoinColumn(name = "professor_id", nullable = false)
@OnDelete(action = OnDeleteAction.CASCADE)
@JsonIgnore
@JsonManagedReference
private Professor professor;
}
答案 0 :(得分:1)
永远不要在@ManyToOne上使用CascadeType.ALL,因为实体状态转换应该从父实体传播到子实体。
删除
(fetch = FetchType.LAZY, optional = false, cascade =
CascadeType.PERSIST)
来自
@ManyToOne(fetch = FetchType.LAZY, optional = false, cascade =
CascadeType.PERSIST)
并将其添加到
@OneToMany(fetch = FetchType.LAZY, optional = false, cascade =
CascadeType.PERSIST)
侧面。
说明:
如vladmihalcea在this article和他的书High-Performance Java Persistence中所述,您永远不要在CascadeType.ALL
上使用@ManyToOne
,因为entity state transitions应该从父实体传播到孩子的。
@ManyToOne
端始终是Child关联,因为它应该映射基础FK。
因此,将CascadeType.ALL
从@ManyToOne
关联移动到@OneToMany
,由于它是the most efficient one-to-many mapping,因此应使用mappedBy
属性。
`
答案 1 :(得分:0)
您可以使用CascadeType.ALL
来级联所有操作(PERSIST,MERGE,REMOVE,REFRESH,DETACH
)。
有关更多详细信息,请查看here