Problem to write foreign key in table

3

I'm developing a java web project - using Spring, Thymeleaf, Html, Mysql. In this project I have two classes that are related by foreign key. (Technical and Cargo).

In my view (addTechnical.html) I created a combobox using select to fetch the job list, so far so good, it is showing the right job list, but when it is chosen the job is not sending the selected registry information for the Controller's POST (TecnicoController), the Position is going empty. Thanks if anyone can help me. I'll put the information below:

TECHNICAL CLASS:

@Entity
@Table(name = "user")
public class Tecnico{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "user_id")
    private int id;

    @Column(name = "email")
    private String email;

    @Column(name = "password")
    @Transient
    private String password;

    @Column(name = "name")
    private String nome;

    @Column(name = "active")
    private int active;

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
    private Set<Role> roles;

    @Column(name = "cpf")
    private String cpf;

    @Column(name = "matricula")
    private int matricula;

    @Column(name = "perfil")
    private String perfil;

    @Column(name = "status")
    private String status;

    @ManyToOne(cascade=CascadeType.ALL)
    public Cargo cargo;

    // getters e setters

    @Override
    public String toString() {
        return "Tecnico [id=" + id + ", email=" + email + ", password=" + password + ", nome=" + nome + ", active="
                + active + ", roles=" + roles + ", cpf=" + cpf + ", matricula=" + matricula + ", perfil=" + perfil
                + ", status=" + status + ", cargo=" + cargo + "]";
    }

}

CLASS POSITION:

@Entity
@Table(name = "cargo")
public class Cargo {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    public int id;

    @Column(name = "descricao")
    public String descricao;

    @Column(name = "status")
    public String status;

    // getters e setters

    @Override
    public String toString() {
        return "Cargo [id=" + id + ", descricao=" + descricao + ", status=" + status + "]";
    }

}

TECNICOCONTROLLER CLASS (only the GET and POST methods of the addTechnical.html view):

@RequestMapping(value = "/admin/tecnico/adicionarTecnico", method = RequestMethod.GET)
public ModelAndView adicionar() {
    ModelAndView modelAndView = new ModelAndView();
    carregarUsuarioLogado(modelAndView);

    Tecnico tecnico = new Tecnico();

    modelAndView.addObject("tecnico", tecnico);
    modelAndView.setViewName("/admin/tecnico/adicionarTecnico");

    List<Cargo> cargo = cargoService.findAllCargos();

    modelAndView.addObject("cargo", cargo);

    return modelAndView;
}

@RequestMapping(value = "/admin/tecnico/adicionarTecnico", method = RequestMethod.POST)
public ModelAndView adicionar(@Valid Tecnico tecnico, Cargo cargo, BindingResult bindingResult) {
    ModelAndView modelAndView = new ModelAndView();

    carregarUsuarioLogado(modelAndView);
    System.out.println("passou por aqui....");
    Tecnico tecnicoMatricula = tecnicoService.findTecnicoByMatricula(tecnico.getMatricula());
    System.out.println("passou por aqui.xxxx...");

    if (tecnicoMatricula != null) {
        bindingResult.rejectValue("matricula", "error.tecnico", "Esta matrícula já foi cadastrada");
    } 
    System.out.println("passou por aqui.yyyy...");

    Tecnico tecnicoCpf = tecnicoService.findTecnicoByCpf(tecnico.getCpf());

    if (tecnicoCpf != null) {
        bindingResult.rejectValue("cpf", "error.tecnico", "Este CPF já foi cadastrado");
    } 
    System.out.println("passou por aqui..zzzz..");

    Tecnico tecnicoEmail = tecnicoService.findTecnicoByEmail(tecnico.getEmail());

    if (tecnicoEmail != null) {
        bindingResult.rejectValue("email", "error.tecnico", "Este email já foi cadastrado");
    }
    System.out.println("passou por aqui..vvvvv..");

    if (!ValidarCpf.validarCpf(tecnico.getCpf())) {
        bindingResult.rejectValue("cpf", "error.tecnico", "Este cpf é inválido");
    }
    System.out.println("passou por aqui..cccc..");

    if (bindingResult.hasErrors()) {
        modelAndView.setViewName("/admin/tecnico/adicionarTecnico");
    } else {        

        System.out.println(" id do cargo" + cargo.id); ////cargo.id com valor vazio
        System.out.println(" id do cargoxxx" + cargo); ////cargo com valor vazio
        System.out.println(" tecnico " + tecnico);
        //tecnico.setCargo(cargo);
        tecnico.setPassword("smas1234");
        System.out.println("passou por aqui..bbbbb..");

        //tecnicoService.saveTecnico(tecnico);

        System.out.println("passou por aqui...ttttt.");

        modelAndView.addObject("successMessage", "Técnico cadastrado com sucesso!");
        System.out.println("passou por aqui..rrrr..");

        //modelAndView.addObject("tecnico", new Tecnico());
    }
    return modelAndView;
}

VIEW ADDICTION (only combobox select)

        <div class="box-body">                              
            <div class="form-group col-md-4">
                                          <label for="exampleInputEmail">Cargos *</label> 
                  <select class="form-control" th:field="*{cargo.id}">
                                    <option th:each="cargo : ${cargo}" 
                                         th:value="${cargo.id}" th:selected="selected"
                                         th:utext="${cargo.descricao}"/>
                                         </select>
            </div>
         </div> 
    
asked by anonymous 18.08.2018 / 04:11

0 answers