8
respostas

Erro creating bean

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'agendaDeConsultas': Unsatisfied dependency expressed through field 'consultaRepository': Error creating bean with name 'consultaRepository' defined in med.voll.api.Consultas.ConsultaRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract boolean med.voll.api.Consultas.ConsultaRepository.existsByPacienteIdAndDataBetween(java.lang.Long,java.time.LocalDateTime,java.time.LocalDateTime,java.time.LocalDateTime); Reason: Failed to create query for method public abstract boolean med.voll.api.Consultas.ConsultaRepository.existsByPacienteIdAndDataBetween(java.lang.Long,java.time.LocalDateTime,java.time.LocalDateTime,java.time.LocalDateTime); At least 4 parameter(s) provided but only 3 parameter(s) present in query
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:788) ~[spring-beans-6.1.13.jar:6.1.13]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:768) ~[spring-beans-6.1.13.jar:6.1.13]
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:145) ~[spring-beans-6.1.13.jar:6.1.13]
8 respostas

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidadeTodos esses métodos de consulta precisam ter a query em cima? Ou o spring faz automático? Estou com dúvida se pode ser isso o erro

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

Bom dia, Matheus! Tudo bem?

Primeiramente respondendo a sua pergunta, não, nem todos os métodos de consulta precisam da query usada na com a annotion @Query, apenas consultas especificas que precisam disso. No caso do método que está ocorrendo o erro não é necessário por que você está usando um método que utiliza de Keywords que simulam uma estrutura de busca.

Agora, sobre o erro, lendo a mensagem de erro que você compartilhou, a causa apontada é "least 4 parameter(s) provided but only 3 parameter(s) present in query", que significa que você passou apenas 3 parâmetros para o método, mas você definiu 4 no repositório.

Isso é um contraditório já que em um dos seus prints podemos notar que você passa 4 parâmetros para o método, o que me leva pensar que talvez o parâmetro dados.data() não é do tipo LocalDateTime requerido para esse parâmetro.

Verifique esse ponto, mas caso isso não solucione, peço que compartilhe todo o seu código para que eu possa analisar e identificar o problema.

No mais, bons estudos!

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

Oi Armano, bom dia! Ahh entendi. Sobre o parâmetro data, eu percebi que o erro dizia isso dessa inconsistência, mas não achei. Vou mandar alguns prints.

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

Opa, Matheus!

Olhando seus prints não conseguir identificar nenhuma inconsistência aparente. Então recomendo que upe o seu projeto no GitHub ou Drive do Google e compartilhe o link comigo. Assim poderei testar e debuggar o código.

Subi a aplicação pro github https://github.com/matheusmaiagoulart/API-vollmed

Pessoal, consegui resolver o erro. Como visto, o erro estava dando na query, em que dizia que eu declarava 4 parametros mas só enviava 3.

Essa parte aqui do código ->

var pacienteSemOutraConsulta = consultaRepository.existsByPacienteIdAndDataBetween(dados.idPaciente(),primeiroHorario, ultimoHorario, dados.data());

Porém, o erro estava nessa escrita do método para criar a query automáticamente. É declarado PacienteID, DataBetween(a de inicio e termino) mas não coloquei a data atual, então adicionei no final AndData.

Que ficou assim ->

var pacienteSemOutraConsulta = consultaRepository.existsByPacienteIdAndDataBetweenAndData(dados.idPaciente(),primeiroHorario, ultimoHorario, dados.data());

E ai o projeto compilou sem mais erros de query pois todos os parâmetros passados estavam sendo usados para a query.

Oi Matheus!

Esse método, na classe ConsultaRepository, deve ter apenas 3 parâmetros mesmo:

boolean existsByPacienteIdAndDataBetween(Long idPaciente, LocalDateTime primeiroHorario, LocalDateTime ultimoHorario);

E ao chamá-lo, você deve passar apenas os 3 parâmetros:

var pacienteSemOutraConsulta = consultaRepository.existsByPacienteIdAndDataBetween(dados.idPaciente(), primeiroHorario, ultimoHorario);

Essa data que você estava passando como quarto parâmetro não deve ser passada não.

Bons estudos!