2
respostas

[Bug] Erro ao listar artistas

Ola, estou pegando um erro quando tento listar artistas cadastrados no banco, mas esse erro so acontece quando tem musicas setadas para esse artista se nao ele lista normalmente aqui segue o link do repo https://github.com/felipe010101/spring-music esse erro java.lang.StackOverflowError: null poderia me ajudar ? ;)

2 respostas

Olá Felipe.

Tudo bem?

Pelo que você descreveu e considerando o erro java.lang.StackOverflowError, parece que você está enfrentando um problema comum de recursão infinita, que geralmente ocorre em situações de relacionamentos bidirecionais em entidades JPA.

Quando você tem entidades relacionadas, como Artista e Música, e ambas as entidades têm referências uma à outra, o Jackson (usado para serializar objetos Java em JSON) pode entrar em um loop infinito tentando serializar esses objetos. Isso acontece porque cada entidade tenta serializar a outra repetidamente.

Uma maneira comum de tentar resolver isso é usando a anotação @JsonIgnore em um dos lados do relacionamento para evitar essa serialização cíclica. Por exemplo, se você tem um relacionamento entre Artista e Música onde Artista tem uma lista de Música e Música tem uma referência a Artista, você pode adicionar @JsonIgnore na referência de volta para Artista dentro da classe Música.

Aqui está um exemplo de como você poderia ajustar suas classes:

@Entity
public class Artista {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String nome;

    @OneToMany(mappedBy = "artista")
    private List<Musica> musicas;

    // getters e setters
}

@Entity
public class Musica {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String titulo;

    @ManyToOne
    @JoinColumn(name = "artista_id")
    @JsonIgnore
    private Artista artista;

    // getters e setters
}

Neste exemplo, ao adicionar @JsonIgnore na propriedade artista da entidade Musica, você evita a serialização da referência de volta para Artista, o que deve resolver o problema de StackOverflowError.

Verifique se essa alteração resolve o problema no seu caso. Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos.

Obrigado pela a ajuda!