1
resposta

Erro with name

fala galera blz, to com esse erro desde ontem as 17h, alguem poderia me dar uma "Ajuda"

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'screenmatchApplication': Unsatisfied dependency expressed through field 'repositorio': Error creating bean with name 'serieRepository' defined in br.com.alura.screenmatch.repository.SerieRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract java.util.List br.com.alura.screenmatch.repository.SerieRepository.findByAtoresContainingIgnoreCaseAvaliacaoGreaterThanEqual(java.lang.String,double); Reason: Failed to create query for method public abstract java.util.List br.com.alura.screenmatch.repository.SerieRepository.findByAtoresContainingIgnoreCaseAvaliacaoGreaterThanEqual(java.lang.String,double); No property 'containingAvaliacao' found for type 'String'; Traversed path: Serie.atores at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:787) ~[spring-beans-6.1.10.jar:6.1.10] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:767) ~[spring-beans-6.1.10.jar:6.1.10] at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:145) ~[spring-beans-6.1.10.jar:6.1.10] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:508) ~[spring-beans-6.1.10.jar:6.1.10] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1421) ~[spring-beans-6.1.10.jar:6.1.10] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) ~[spring-beans-6.1.10.jar:6.1.10] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.10.jar:6.1.10] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.10.jar:6.1.10] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.10.jar:6.1.10] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.10.jar:6.1.10] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.10.jar:6.1.10] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975) ~[spring-beans-6.1.10.jar:6.1.10] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:962) ~[spring-context-6.1.10.jar:6.1.10] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624) ~[spring-context-6.1.10.jar:6.1.10] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.3.1.jar:3.3.1] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.3.1.jar:3.3.1] at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) ~[spring-boot-3.3.1.jar:3.3.1] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) ~[spring-boot-3.3.1.jar:3.3.1] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) ~[spring-boot-3.3.1.jar:3.3.1] at br.com.alura.screenmatch.ScreenmatchApplication.main(ScreenmatchApplication.java:18) ~[classes/:na] Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serieRepository' defined in br.com.alura.screenmatch.repository.SerieRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract java.util.List br.com.alura.screenmatch.repository.SerieRepository

1 resposta

Olá Iury, tudo bem?

Pelo que você descreveu, parece que o erro está relacionado ao método findByAtoresContainingIgnoreCaseAvaliacaoGreaterThanEqual na sua interface SerieRepository. O Spring Data JPA está tentando criar uma consulta com base no nome do método, mas não consegue encontrar a propriedade containingAvaliacao no tipo String.

Vamos analisar o problema em partes:

  1. Nome do Método:

    • O nome do método findByAtoresContainingIgnoreCaseAvaliacaoGreaterThanEqual pode estar incorreto. Ele sugere que você está tentando combinar duas condições: uma que verifica se uma string contém outra string (ContainingIgnoreCase) e outra que verifica se uma avaliação é maior ou igual a um valor (GreaterThanEqual). No entanto, a maneira como está escrito pode estar causando confusão no Spring Data JPA.
  2. Divisão das Condições:

    • Tente dividir a consulta em duas partes:
      List<Serie> findByAtoresContainingIgnoreCase(String ator);
      List<Serie> findByAvaliacaoGreaterThanEqual(double avaliacao);
      
    • Depois, você pode combinar os resultados programaticamente ou criar uma consulta personalizada usando a anotação @Query.
  3. Consulta Personalizada:

    • Se você realmente precisa combinar essas condições em uma única consulta, você pode usar a anotação @Query para definir a consulta manualmente:
      @Query("SELECT s FROM Serie s WHERE LOWER(s.atores) LIKE LOWER(CONCAT('%', :ator, '%')) AND s.avaliacao >= :avaliacao")
      List<Serie> findByAtoresContainingIgnoreCaseAndAvaliacaoGreaterThanEqual(@Param("ator") String ator, @Param("avaliacao") double avaliacao);
      
  4. Exemplo Completo:

    • Aqui está um exemplo de como sua interface SerieRepository pode ficar:
      import org.springframework.data.jpa.repository.JpaRepository;
      import org.springframework.data.jpa.repository.Query;
      import org.springframework.data.repository.query.Param;
      import java.util.List;
      
      public interface SerieRepository extends JpaRepository<Serie, Long> {
          
          @Query("SELECT s FROM Serie s WHERE LOWER(s.atores) LIKE LOWER(CONCAT('%', :ator, '%')) AND s.avaliacao >= :avaliacao")
          List<Serie> findByAtoresContainingIgnoreCaseAndAvaliacaoGreaterThanEqual(@Param("ator") String ator, @Param("avaliacao") double avaliacao);
      }
      

Espero que isso ajude a resolver o problema, porém, caso não resolva, peço que compartilhe todo o seu projeto usando o GitHub ou Drive do Google, assim poderei fazer testes para identificar o problema.

Bons estudos!

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