Spring [已解决]春季在多对多关系中添加项目的问题

Spring [已解决]春季在多对多关系中添加项目的问题,spring,many-to-many,thymeleaf,Spring,Many To Many,Thymeleaf,我对此有点绝望,因为我认为我做错了什么,但我找不到是什么。我一直在寻找答案,但没有人能解决 我有两个具有多对多关系的实体,但当我尝试向其中一个实体添加项目时,这是不可能的。很抱歉,它没有被添加到数据库中 其中一个是Formador,另一个是Provedor。只是想向Formador(Formador.proveedores)分配一个(或多个)Provedor项目 实体如下: Formador(仅关系和构造函数) @ManyToMany(mappedBy=“formadores”) 私人名单提供者

我对此有点绝望,因为我认为我做错了什么,但我找不到是什么。我一直在寻找答案,但没有人能解决

我有两个具有多对多关系的实体,但当我尝试向其中一个实体添加项目时,这是不可能的。很抱歉,它没有被添加到数据库中

其中一个是Formador,另一个是Provedor。只是想向Formador(Formador.proveedores)分配一个(或多个)Provedor项目

实体如下:

Formador(仅关系和构造函数)

@ManyToMany(mappedBy=“formadores”)
私人名单提供者;
//建设者
公共Formador(){}
公共格式(长idFormador、字符串nifFormador、字符串passFormador、字符串nombreFormador、字符串AP1格式、,
字符串AP2格式、字符串目录格式、int-cpFormador、字符串本地化格式、,
字符串provinciaFormador、字符串tel1Formador、字符串tel2Formador、字符串mail1Formador、,
字符串Mail2格式,字符串cuentaBancariaFormador,列表Vitas,列表zonas,Rol-Rol,
列表格式、列表商业、列表供应商)
证明人(相同)

@ManyToMany(fetch=FetchType.LAZY,cascade={CascadeType.PERSIST,CascadeType.MERGE})
@可接合(
name=“formadores\u Provedores”,
joinColumns=@JoinColumn(name=“id\u proveder”),
inverseJoinColumns=@JoinColumn(name=“id\u formador”))
私人名单;
//建设者
公共Proveedor(){}
公共Proveedor(长idProveedor、字符串名称Proveedor、列表campagnas、列表franquicias、,
区域列表、区域列表、格式列表、格式列表)
Formador控制器

@GetMapping("/formadorAsignaProveedor/{idFormador}")
public String asignarProveedorFormador(@PathVariable("idFormador") Long idFormador, Model model) {  
    
    Formador formador = null;
    if (idFormador != null) {
        formador = formadorService.findOneFormador(idFormador);
    }
    else{
        return "redirect:/index";
    }
    
    Proveedor proveedor = new Proveedor();
    List <Proveedor> listaProveedores = formadorService.findAllProveedores();
    model.addAttribute("proveedores", listaProveedores);
    model.addAttribute("proveedor", proveedor);
    model.addAttribute("formador", formador);

    return "/formadorAsignaProveedor";
}

@PostMapping("/formadorAsignaProveedor/{idFormador}")
public String formadorGuardaAsignacionProveedor (@PathVariable("idFormador") Long idFormador, Proveedor proveedor, Model model) {       
    Formador formador = null;
        if (idFormador != null) {
            formador = formadorService.findOneFormador(idFormador);
        }
        else{
            return "redirect:/index";
        }
    formador.getProveedores().add(proveedor);
    formadorService.saveFormador(formador);
    model.addAttribute("formador", formador);
    return "redirect:/formadorVer/" + idFormador;
}
@GetMapping(“/formadorAsignaProveedor/{idFormador}”)
公共字符串AsignarProvedOrformador(@PathVariable(“idFormador”)长idFormador,Model Model){
Formador Formador=null;
如果(idFormador!=null){
formador=FormatorService.findOneFormador(idFormador);
}
否则{
返回“重定向:/index”;
}
PROVEDEOR PROVEDEOR=新PROVEDEOR();
List LISTAPROVEDORES=formatorService.findallProveredores();
model.addAttribute(“proveedores”,listaprovedores);
model.addAttribute(“proveedor”,proveedor);
model.addAttribute(“formador”,formador);
返回“/formadorAsignaProveedor”;
}
@后映射(“/formadorAsignaProveedor/{idFormador}”)
公共字符串formadorguardaasignacionprovider(@PathVariable(“idFormador”)Long idFormador,Proveedor Proveedor,Model Model){
Formador Formador=null;
如果(idFormador!=null){
formador=FormatorService.findOneFormador(idFormador);
}
否则{
返回“重定向:/index”;
}
formador.getProvedores().add(Provedor);
FormarService.saveFormador(formador);
model.addAttribute(“formador”,formador);
返回“重定向:/FormadOver/”+idFormador;
}
网络:

    <form th:action="@{/formadorAsignaProveedor/} + ${formador.idFormador}"
                th:object="${proveedor}" th:method="POST">
                <div class="form-row mt-2">
                    <div class="col-4 mt-2">
                        <select id="proveedorFormador" class="form-control"
                            th:field="*{idProveedor}">
                            <option th:each="proveedor:${proveedores}"
                                th:text="${proveedor.nombreProveedor}"
                                th:value="${proveedor.idProveedor}"></option>
                        </select>
                    </div>
                </div>
                <div class="form-row mt-2">
                    <div class="col-4 mt-2">
                        <input type="submit" class="btn btn-success" value="Asignar">
                    </div>
                </div>
            </form>

提前感谢您的帮助

解决方案:

解决方案对我来说并不明显:当我与实体Formador(我在其中进行更改)合作时,我将其作为关系的所有者

因此,我将模型更改为:

福尔马多

@ManyToMany (fetch = FetchType.LAZY,  cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(
        name = "formadores_proveedores",
        joinColumns = @JoinColumn(name = "id_formador"),
        inverseJoinColumns = @JoinColumn(name = "id_proveedor"))
private List <Proveedor> proveedores;
@ManyToMany(fetch=FetchType.LAZY,cascade={CascadeType.PERSIST,CascadeType.MERGE})
@可接合(
name=“formadores\u Provedores”,
joinColumns=@JoinColumn(name=“id_formador”),
inverseJoinColumns=@JoinColumn(name=“id\u Provedor”))
私人名单提供者;
校长

@ManyToMany (mappedBy = "proveedores")
private List <Formador> formadores;
@ManyToMany(mappedBy=“proveedores”)
私人名单;

谢谢大家!

您使用的是Spring数据jpa还是纯hibernate?Im使用的是Spring jpa?您使用的是Spring数据jpa还是纯hibernate?Im使用的是Spring jpa
@ManyToMany (fetch = FetchType.LAZY,  cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(
        name = "formadores_proveedores",
        joinColumns = @JoinColumn(name = "id_formador"),
        inverseJoinColumns = @JoinColumn(name = "id_proveedor"))
private List <Proveedor> proveedores;
@ManyToMany (mappedBy = "proveedores")
private List <Formador> formadores;