Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Salvar dados na tabela associativa com o @ManyToMany

Boa noite pessoal, preciso de uma ajuda pooor favor!

O que acontece é o seguinte: Eu tenho minha classe Aluno:

@Entity
@Table(name="Aluno")
public class Aluno extends Usuario{

    @ManyToOne
    private Faculdade faculdade;

    @ManyToOne
    private FaixaPreco faixaPreco;

    @ManyToMany
    private List<LocalUtilProximo> locaisUteisProximos;

    /*fetch=FetchType.EAGER,*/
    @ManyToMany(cascade = {CascadeType.ALL})
    private List<BeneficioIncluso> beneficiosInclusos;

    public List<BeneficioIncluso> getBeneficiosInclusos() {
        return beneficiosInclusos;
    }

    public void setBeneficiosInclusos(List<BeneficioIncluso> beneficiosInclusos) {
        this.beneficiosInclusos = beneficiosInclusos;
    }


}

Tenho minha classe beneficioIncluso:

@Entity
@Table(name="Beneficio_Incluso")
public class BeneficioIncluso {

    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int codigo;

    @Column(name="descricao", length=20, nullable=true)
    private String descricao;

    @Override
    public String toString() {
        return this.descricao;
    }

    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

}

Estou fazendo um projeto WEB, estou Usando Spring Boot e CrudRepository Método parar gravar

@PostMapping(value = "/cadastraraluno", consumes= MediaType.APPLICATION_JSON_VALUE)
    public void cadastrarUsuario(@RequestBody Aluno aluno) {

        alunoRepository.save(aluno);
    }

Eu desejo cadastrar um aluno novo na tabela Aluno e na tabela associativa aluno_beneficios_inclusos, maaas eu já recebo um aluno com a List (List beneficiosInclusos) populada no Front-End e ao tentar cadastrar o método cadastra novos Benefícios gerando inconsistência nos dados, pois eu não quero cadastrar novos benefícios, eu quero usar minha List para identificar com os benefícios que já estão cadastrados no banco. OBS: Os dados que recebo do Front estão corretos e SEMPRE recebo na List objetos que já se encontram cadastrados no banco por isso não desejo cadastrá-los novamente!

Quero cadastrar apenas na tabela aluno e na tabela associativa se alguém puder me ajudar serei muuiitooo grato!

2 respostas
solução!

Já consegui, tive que passar o código e a descrição (do benefícioIncluso) para o back-end para não inserir duplicados, mas eu usei:

@ManyToMany(cascade = {CascadeType.DETACH})
    private List<BeneficioIncluso> beneficiosInclusos;

Esse DETACH está correto? Pelo menos funcionou "kkkk"

Tiago,

Daora saber que conseguiu resolver :D

Ele só salva os que ainda não estão gerenciados pelo entitymanager