2
respostas

Anotação @ManyToMany não adiciona na tabela

Bom dia!

Estou fazendo o curso de Spring DATA JPA e estou com uma dúvida em relação a anotação ManyToMany.

Tenho a seguinte classe, onde existe essa anotação com a classe UnidadeTrabalho.

O Spring gera a tabela funcionarios_unidades, porém não inclui nenhum valor na mesma.

@Entity
@Table(name = "funcionarios")
public class Funcionario {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String nome;
    private String cpf;
    private BigDecimal salario;
    private LocalDate dataContratacao;
    // Faz o select do relacionamento somente se necessário
    @ManyToOne(fetch = FetchType.EAGER)
    private Cargo cargo;
    @ManyToMany()
    @JoinTable(name = "funcionarios_unidades",
            joinColumns =  {@JoinColumn(name = "fk_funcionario")},
            inverseJoinColumns = {@JoinColumn(name = "fk_unidade")}
    )
    private List<UnidadeTrabalho> unidadesTrabalho;

    public Funcionario() { }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public BigDecimal getSalario() {
        return salario;
    }

    public void setSalario(BigDecimal salario) {
        this.salario = salario;
    }

    public LocalDate getDataContratacao() {
        return dataContratacao;
    }

    public void setDataContratacao(LocalDate dataContratacao) {
        this.dataContratacao = dataContratacao;
    }

    public Cargo getCargo() {
        return cargo;
    }

    public void setCargo(Cargo cargo) {
        this.cargo = cargo;
    }

    public List<UnidadeTrabalho> getUnidadesTrabalho() {
        return unidadesTrabalho;
    }

    public void setUnidadesTrabalho(List<UnidadeTrabalho> unidadesTrabalho) {
        this.unidadesTrabalho = unidadesTrabalho;
    }


    @Override
    public String toString() {
        return "Funcionário " + id +
                " -> " + nome +
                " - " + cpf +
                " - " + salario +
                " - " + dataContratacao +
                " - " + cargo;
    }
}
2 respostas

Olá, tudo bem? O que seria "fk_unidade"?

É o nome da coluna que referencia a tabela unidade_trabalho.

Colunas

Chaves estrangeiras O SQL de criação está correto, veja:

CREATE TABLE `funcionarios_unidades` (
  `fk_funcionario` int(11) NOT NULL,
  `fk_unidade` int(11) NOT NULL,
  KEY `FKgn3jpmj1h0hdy8io3beyrc13i` (`fk_unidade`),
  KEY `FKg6nq7h4hjl3njvdd4304jp2m0` (`fk_funcionario`),
  CONSTRAINT `FKg6nq7h4hjl3njvdd4304jp2m0` FOREIGN KEY (`fk_funcionario`) REFERENCES `funcionarios` (`id`),
  CONSTRAINT `FKgn3jpmj1h0hdy8io3beyrc13i` FOREIGN KEY (`fk_unidade`) REFERENCES `unidade_trabalho` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4