在一对多关系中添加实体

问题描述 投票:0回答:0

我正在尝试使用 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 关联的新评级。

任何帮助将不胜感激。

html spring-boot controller one-to-many hibernate-onetomany
© www.soinside.com 2019 - 2024. All rights reserved.