2
respostas

insercao de dados inifinitas vezes - java, sql

eu tenho uma classe season (temporada) e uma classe episode (episodio). a classe season tem uma lista de episodios, porem ao tentar adicionar um episodio novo, ele acaba inserindo inifinitas vezes o mesmo episodio.

CLASSE SEASON

package com.br.suits.models;

import jakarta.persistence.*;

import java.util.List;

@Entity
@Table(name = "tb_season")
public class Season {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String sinopse;
    @OneToMany(mappedBy = "season", cascade = CascadeType.ALL)
    private List<Episode> episodes;

    public Season(Long id, String sinopse) {
        this.id = id;
        this.sinopse = sinopse;
    }

    public Season() {
    }

    public Long getId() {
        return id;
    }

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

    public String getSinopse() {
        return sinopse;
    }

    public void setSinopse(String sinopse) {
        this.sinopse = sinopse;
    }

    public List<Episode> getEpisodes() {
        return episodes;
    }

    public void setEpisodes(List<Episode> episodes) {
        this.episodes = episodes;
    }
}

CLASSE EPISODE

package com.br.suits.models;

import jakarta.persistence.*;

@Entity
@Table(name = "tb_episode")
public class Episode {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    private String description;
    @ManyToOne
    @JoinColumn(name = "season_id", referencedColumnName = "id")
    private Season season;

    public Episode(Long id, String title, String description, Season season) {
        this.id = id;
        this.title = title;
        this.description = description;
        this.season = season;
    }

    public Episode() {
    }

    public Long getId() {
        return id;
    }

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

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Season getSeason() {
        return season;
    }

    public void setSeason(Season season) {
        this.season = season;
    }
}

comando para adicionar novo ep via sql

-- 1. Inserir um registro na tabela tb_episode com os detalhes do primeiro episódio
INSERT INTO tb_episode (title, description, season_id) 
VALUES ('Pilot', 'No episódio piloto, Mike Ross conhece Harvey Specter e é contratado para trabalhar na Pearson Hardman.', 1);

resultado de /season e /episode: Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas

Olá Vinícius! Tudo bem?

Aqui estão algumas sugestões para resolver esse problema:

  1. Revisar o Método de Adição de Episódios: Certifique-se de que o método que adiciona episódios à lista na classe Season não está sendo chamado repetidamente de forma inadequada. Idealmente, você deve ter um método para adicionar episódios que também cuida da relação inversa.

    Por exemplo, na classe Season, você pode adicionar:

    public void addEpisode(Episode episode) {
        episodes.add(episode);
        episode.setSeason(this);
    }
    

    E certifique-se de usar este método ao adicionar episódios.

  2. Verificar Chamadas de Banco de Dados: Assegure-se de que as operações de banco de dados não estão sendo chamadas mais vezes do que o necessário. Por exemplo, ao salvar um episódio, verifique se não está inadvertidamente disparando múltiplas gravações devido a alguma lógica incorreta no código que interage com o banco de dados.

Essas mudanças devem ajudar a resolver o problema de inserção infinita que você está enfrentando. Verifique cada parte do seu código que interage com as operações de adicionar episódios para garantir que não existam chamadas desnecessárias ou repetidas.

Caso essas sugestões não funcionem, peço que compartilhe comigo todo o seu projeto para que eu realize testes.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

quando eu adicionei o @JsonIgnore na propriedade que estava sendo adicionada várias vezes parou de ocorrer o erro, e adiciona apenas uma vez. acredito que talvez nao estava sendo adicionado varias vezes, mas sim no rest retornava várias vezes. se nao for isso, sabe me dizer qual foi a funcao dessa anotacao nesse caso?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade