Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Bug] Problema com o Enum de genêro

Estou enfrentando um problema ao adicionar uma nova série ao meu banco de dados, que gera o seguinte erro:

org.springframework.dao.DataIntegrityViolationException: could not execute statement [ERRO: a nova linha da relação "series" viola a restrição de verificação "series_genero_check"
Detalhe: Registro que falhou contém (30, 2005–2020, Jared Padalecki, Jensen Ackles, Jim Beaver, 8.4, Dois irmãos seguem os passos do pai como caçadores, lutando co..., DRAMA, https://m.media-amazon.com/images/M/MV5BNzRmZWJhNjUtY2ZkYy00N2My..., Supernatural, 15).] [insert into series (ano,atores,avaliacao,descicao,genero,imagem,titulo,total_de_temporadas) values (?,?,?,?,?,?,?,?)]; SQL [insert into series (ano,atores,avaliacao,descicao,genero,imagem,titulo,total_de_temporadas) values (?,?,?,?,?,?,?,?)]; constraint [null]

O gênero mencionado no erro está presente no Enum. Como posso resolver esse problema? Alguém tem alguma ideia do que pode estar causando essa violação de integridade de dados?

public enum Categoria {
    COMEDIA("Comedy", "Comédia"),
    TERROR("Horror", "Terror"),
    ROMANCE("Romance", "Romance"),
    FANTASIA("Fantasy", "Fantasia"),
    ANIMACAO("Animation", "Animação"),
    DOCUMENTARIO("Documentary", "Documentário"),
    CRIME("Crime", "Crime"),
    AVENTURA("Adventure", "Aventura"),
    MISTERIO("Mystery", "Mistério"),
    HISTORICO("Historical", "Histórico"),
    BIOGRAFIA("Biography", "Biografia"),
    MUSICAL("Musical", "Musical"),
    GUERRA("War", "Guerra"),
    ESPORTE("Sports", "Esporte"),
    FAMILIA("Family", "Família"),
    ACAO("Action", "Ação"),
    POLICIAL("Police", "Policial"),
    DRAMA("Drama", "Drama"),
    WESTERN("Western", "Ocidental"),
    HORROR("Horror", "Horror");

    private String categoriasOmdb;
    private String categoriaOmdbPortugues;

    Categoria(String categoriasOmdb, String categoriaomdbPortugues) {
        this.categoriasOmdb = categoriasOmdb;
        this.categoriaOmdbPortugues = categoriaomdbPortugues;
    }

    public static Categoria fromString(String valor){
        for (Categoria categoria : Categoria.values()){
            if (categoria.categoriasOmdb.equalsIgnoreCase(valor)){
                return categoria;
            }
        }
        throw new IllegalArgumentException("Nenhuma categoria encontrada " + valor);
    }

    public static Categoria fromStringPorgues(String valor){
        for (Categoria categoria : Categoria.values()){
            if (categoria.categoriaOmdbPortugues.equalsIgnoreCase(valor)){
                return categoria;
            }
        }
        throw new IllegalArgumentException("Nenhuma categoria encontrada " + valor);
    }

}

Repositório: https://github.com/LeonardoSardagna/javaFilms.git

1 resposta
solução!

Depois de criar a tabela, percebi que havia adicionado novos gêneros sem inseri-los na tabela, o que resultou em um erro. Para resolver isso, primeiro verifiquei quais gêneros a tabela possuía usando a seguinte consulta:

SELECT * 
FROM information_schema.check_constraints
WHERE constraint_name = 'series_genero_check';

Em seguida, removi os gêneros da tabela com o comando:

ALTER TABLE series
DROP CONSTRAINT series_genero_check;

Finalmente, adicionei todos os gêneros que o enum da minha tabela possuía com o seguinte comando:

ALTER TABLE series
ADD CONSTRAINT series_genero_check 
CHECK (genero IN ('COMEDIA', 'TERROR', 'ROMANCE', 'FANTASIA', 'ANIMACAO', 'DOCUMENTARIO', 'CRIME', 'AVENTURA', 'MISTERIO', 'HISTORICO', 'BIOGRAFIA', 'MUSICAL', 'GUERRA', 'ESPORTE', 'FAMILIA', 'ACAO', 'POLICIAL', 'DRAMA', 'WESTERN', 'HORROR'));