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

Erro .DataIntegrityViolationException

Olá, Quando tento passar a série The big bang theory para a busca da esse erro!

[ERRO: valor é muito longo para tipo character varying(255)]

Erro :

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2024-07-14T13:09:05.797-03:00 ERROR 13516 --- [screenmatch] [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.dao.DataIntegrityViolationException: could not execute statement [ERRO: valor é muito longo para tipo character varying(255)] [insert into series (atores,avaliacao,genero,poster,sinopse,titulo,total_temporadas) values (?,?,?,?,?,?,?) returning id]; SQL [insert into series (atores,avaliacao,genero,poster,sinopse,titulo,total_temporadas) values (?,?,?,?,?,?,?) returning id]
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:293) ~[spring-orm-6.1.10.jar:6.1.10]
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:241) ~[spring-orm-6.1.10.jar:6.1.10]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:550) ~[spring-orm-6.1.10.jar:6.1.10]
    at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61) ~[spring-tx-6.1.10.jar:6.1.10]
    at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:335) ~[spring-tx-6.1.10.jar:6.1.10]
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:160) ~[spring-tx-6.1.10.jar:6.1.10]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.1.10.jar:6.1.10]
    at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:165) ~[spring-data-jpa-3.3.1.jar:3.3.1]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.1.10.jar:6.1.10]
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-6.1.10.jar:6.1.10]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.1.10.jar:6.1.10]
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223) ~[spring-aop-6.1.10.jar:6.1.10]
    at jdk.proxy2/jdk.proxy2.$Proxy101.save(Unknown Source) ~[na:na]
    at br.com.alura.screenmatch.principal.Principal.buscarSerieWeb(Principal.java:76) ~[classes/:na]
    at br.com.alura.screenmatch.principal.Principal.exibeMenu(Principal.java:53) ~[classes/:na]
    at br.com.alura.screenmatch.ScreenmatchApplication.run(ScreenmatchApplication.java:23) ~[classes/:na]
    at org.springframework.boot.SpringApplication.lambda$callRunner$5(SpringApplication.java:790) ~[spring-boot-3.3.1.jar:3.3.1]
    at org.springframework.util.function.ThrowingConsumer$1.acceptWithException(ThrowingConsumer.java:83) ~[spring-core-6.1.10.jar:6.1.10]
    at org.springframework.util.function.ThrowingConsumer.accept(ThrowingConsumer.java:60) ~[spring-core-6.1.10.jar:6.1.10]
    at org.springframework.util.function.ThrowingConsumer$1.accept(ThrowingConsumer.java:88) ~[spring-core-6.1.10.jar:6.1.10]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:798) ~[spring-boot-3.3.1.jar:3.3.1]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:789) ~[spring-boot-3.3.1.jar:3.3.1]
    at org.springframework.boot.SpringApplication.lambda$callRunners$3(SpringApplication.java:774) ~[spring-boot-3.3.1.jar:3.3.1]
    at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[na:na]
    at java.base/java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:357) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:557) ~[na:na]
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:546) ~[na:na]
    at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) ~[na:na]
...
1 resposta
solução!

Olá Neto, tudo bem?

O erro "valor é muito longo para tipo character varying(255)" indica que você está tentando inserir um valor que excede o limite de 255 caracteres definido para a coluna.

Para resolver esse problema, você pode considerar duas abordagens:

  1. Aumentar o tamanho da coluna no banco de dados: Se você espera que os valores possam ser maiores que 255 caracteres, você pode alterar a definição da coluna no banco de dados para permitir valores maiores. Por exemplo, se a coluna que está causando o problema é titulo, você pode alterar a definição dela para character varying(500) ou até mesmo text se não houver um limite específico esperado.

    Aqui está um exemplo de como você poderia fazer isso em SQL:

    ALTER TABLE series ALTER COLUMN titulo TYPE character varying(500);
    
  2. Garantir que os valores inseridos não excedam o limite: Se você não pode ou não quer alterar a definição da coluna, você pode garantir que os valores que está inserindo não excedam o limite de 255 caracteres. Você pode fazer isso truncando o valor antes de salvá-lo no banco de dados.

    Aqui está um exemplo de como você pode fazer isso em Java:

    String titulo = dados.getTitulo();
    if (titulo.length() > 255) {
        titulo = titulo.substring(0, 255);
    }
    serie.setTitulo(titulo);
    repositorio.save(serie);
    

Escolha a abordagem que melhor se adapta às suas necessidades. Se você espera que os valores possam ser grandes, a primeira abordagem é mais adequada. Se os valores maiores são exceções e você pode truncá-los sem perder informações importantes, a segunda abordagem pode ser suficiente.

Espero ter ajudado e bons estudos!

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