我正在尝试使用 Spring Boot、MySQL 和 HTML 创建一个应用程序,但是我遇到了问题。我有两个实体,称为
Establecimiento
和 Valoracion
。我的想法是,一个机构可以有多个评级,但一个评级只属于一个机构。因此,OneToMany 关系。我在这里附上我如何在两个实体中拥有它:
....
@OneToMany(mappedBy = "establecimiento", cascade = CascadeType.PERSIST)
private List<Valoracion> valoraciones;
public void addValoracion(Valoracion valoracion) {
valoraciones.add(valoracion);
valoracion.setEstablecimiento(this);
}
....
@ManyToOne
@JoinColumn(name = "establecimiento_id")
private Establecimiento establecimiento;
实体一旦建立,我想在控制器中实现它,但问题是,对于一个机构,每次我添加一个新的估值,它都会取代以前的估值,所以我只有一个正在重写的估值。我将下面的代码留在控制器中以发出 GET 和 POST 请求。
@RequestMapping(value="/cliente/establecimientos/{id}/nuevaValoracion", method = RequestMethod.GET)
public String nuevaValoracion(@PathVariable Integer id, ModelMap model) {
Establecimiento establecimiento = establecimientoRepository.findById(id).orElse(null);
Valoracion valoracion = new Valoracion(); // crea una nueva instancia de Valoracion
model.put("valoracion", valoracion); // agrega la valoración al modelo
model.put("establecimiento", establecimiento);
return "Cliente/añadirValoracion.html";
}
@RequestMapping(value="/cliente/establecimientos/{id}/anadirValoracion", method = RequestMethod.POST)
public String anadirValoracion(@Valid Valoracion valoracion, @PathVariable Integer id, BindingResult bindingResult, ModelMap mp) throws JSONException {
if (bindingResult.hasErrors()) {
return "Cliente/añadirValoracion.html";
} else {
Establecimiento establecimiento = establecimientoRepository.findById(id).orElse(null);
valoracion.setEstablecimiento(establecimiento);
establecimiento.addValoracion(valoracion);
establecimientoRepository.save(establecimiento);
valoracionRepository.save(valoracion);
mp.put("valoracion", valoracion);
return "redirect:/cliente/establecimientos/" + id;
}
}
我试过这样做,它只会重写估值。这个想法是,每次您填写评级表时,都会添加一个与该机构 ID 关联的新评级。
任何帮助将不胜感激。