9
respostas

[Bug] Erro a partir da aula - Aplicando princípios SOLID

Professor, a partir da aula "Aplicando princípios SOLID", começou a dar o erro abaixo e não consegui solucionar:


org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'consultaController': Unsatisfied dependency expressed through field 'agendaService': Error creating bean with name 'agendaDeConsultasService': Unsatisfied dependency expressed through field 'consultaRepository': Error creating bean with name 'consultaRepository' defined in med.voll.api.domain.consulta.ConsultaRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract boolean med.voll.api.domain.consulta.ConsultaRepository.existsByMedicoAndData(java.lang.Long,java.time.LocalDateTime); Reason: Failed to create query for method public abstract boolean med.voll.api.domain.consulta.ConsultaRepository.existsByMedicoAndData(java.lang.Long,java.time.LocalDateTime); Cannot compare left expression of type 'med.voll.api.domain.medico.Medico' with right expression of type 'java.lang.Long'



Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'agendaDeConsultasService': Unsatisfied dependency expressed through field 'consultaRepository': Error creating bean with name 'consultaRepository' defined in med.voll.api.domain.consulta.ConsultaRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract boolean med.voll.api.domain.consulta.ConsultaRepository.existsByMedicoAndData(java.lang.Long,java.time.LocalDateTime); Reason: Failed to create query for method public abstract boolean med.voll.api.domain.consulta.ConsultaRepository.existsByMedicoAndData(java.lang.Long,java.time.LocalDateTime); Cannot compare left expression of type 'med.voll.api.domain.medico.Medico' with right expression of type 'java.lang.Long'



Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'consultaRepository' defined in med.voll.api.domain.consulta.ConsultaRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract boolean med.voll.api.domain.consulta.ConsultaRepository.existsByMedicoAndData(java.lang.Long,java.time.LocalDateTime); Reason: Failed to create query for method public abstract boolean med.voll.api.domain.consulta.ConsultaRepository.existsByMedicoAndData(java.lang.Long,java.time.LocalDateTime); Cannot compare left expression of type 'med.voll.api.domain.medico.Medico' with right expression of type 'java.lang.Long'



Caused by: org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract boolean med.voll.api.domain.consulta.ConsultaRepository.existsByMedicoAndData(java.lang.Long,java.time.LocalDateTime); Reason: Failed to create query for method public abstract boolean med.voll.api.domain.consulta.ConsultaRepository.existsByMedicoAndData(java.lang.Long,java.time.LocalDateTime); Cannot compare left expression of type 'med.voll.api.domain.medico.Medico' with right expression of type 'java.lang.Long'



Caused by: java.lang.IllegalArgumentException: Failed to create query for method public abstract boolean med.voll.api.domain.consulta.ConsultaRepository.existsByMedicoAndData(java.lang.Long,java.time.LocalDateTime); Cannot compare left expression of type 'med.voll.api.domain.medico.Medico' with right expression of type 'java.lang.Long'



Caused by: org.hibernate.query.SemanticException: Cannot compare left expression of type 'med.voll.api.domain.medico.Medico' with right expression of type 'java.lang.Long'


9 respostas

Oi!

Na sua interface ConsultaRepository você criou o método com o nome: existsByMedicoAndData, mas deveria ser: existsByMedicoIdAndData

Bons estudos!

Professor, arrumei a questão acima, mas agora aparecem outros erros:

/// org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'consultaController': Unsatisfied dependency expressed through field 'agendaService': Error creating bean with name 'agendaDeConsultasService': Unsatisfied dependency expressed through field 'pacienteRepository': Error creating bean with name 'pacienteRepository' defined in med.voll.api.domain.paciente.PacienteRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract org.springframework.data.domain.Page med.voll.api.domain.paciente.PacienteRepository.findAllByAtivoTrue(org.springframework.data.domain.Pageable); Reason: Failed to create query for method public abstract org.springframework.data.domain.Page med.voll.api.domain.paciente.PacienteRepository.findAllByAtivoTrue(org.springframework.data.domain.Pageable); No property 'ativo' found for type 'Paciente' ///

/// Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'agendaDeConsultasService': Unsatisfied dependency expressed through field 'pacienteRepository': Error creating bean with name 'pacienteRepository' defined in med.voll.api.domain.paciente.PacienteRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract org.springframework.data.domain.Page med.voll.api.domain.paciente.PacienteRepository.findAllByAtivoTrue(org.springframework.data.domain.Pageable); Reason: Failed to create query for method public abstract org.springframework.data.domain.Page med.voll.api.domain.paciente.PacienteRepository.findAllByAtivoTrue(org.springframework.data.domain.Pageable); No property 'ativo' found for type 'Paciente' ///


Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pacienteRepository' defined in med.voll.api.domain.paciente.PacienteRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract org.springframework.data.domain.Page med.voll.api.domain.paciente.PacienteRepository.findAllByAtivoTrue(org.springframework.data.domain.Pageable); Reason: Failed to create query for method public abstract org.springframework.data.domain.Page med.voll.api.domain.paciente.PacienteRepository.findAllByAtivoTrue(org.springframework.data.domain.Pageable); No property 'ativo' found for type 'Paciente'



Caused by: org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract org.springframework.data.domain.Page med.voll.api.domain.paciente.PacienteRepository.findAllByAtivoTrue(org.springframework.data.domain.Pageable); Reason: Failed to create query for method public abstract org.springframework.data.domain.Page med.voll.api.domain.paciente.PacienteRepository.findAllByAtivoTrue(org.springframework.data.domain.Pageable); No property 'ativo' found for type 'Paciente'



Caused by: java.lang.IllegalArgumentException: Failed to create query for method public abstract org.springframework.data.domain.Page med.voll.api.domain.paciente.PacienteRepository.findAllByAtivoTrue(org.springframework.data.domain.Pageable); No property 'ativo' found for type 'Paciente'



Caused by: org.springframework.data.mapping.PropertyReferenceException: No property 'ativo' found for type 'Paciente'


O erro agora indica que na sua classe Paciente não tem o atributo ativo. Confere isso na sua classe.

Professor, consegui consertar essa parte, porém, na hora de testar no Insomnia, alguns requisições aparecem corretamente, outras aparece esse mensage no Intelij:

java.sql.SQLSyntaxErrorException: Unknown column 'p1_0.ativo' in 'field list'

Agora é a falta da coluna ativo na tabela no banco de dados.

Professor, por conta dessa coluna ativo, acabei esbarrando em outro problema que não consegui resolver, então vou utilizar essa mesma questão que coloquei para essa pergunta.

Ao tentar adicionar esse campo ativo, estava dando erro ao criar a nova migration, então pesquisei e precisei deletar o schema no banco de dados e criar um novo, aí deu certo e o campo ativo foi criado. Porém, como deletei a schema, perdi tudo o que estava cadastrado no banco de dados e agora não consigo fazer os testes no Insomnia por conta disso, pois não existem médicos e pacientes no banco de dados, então, não consigo fazer o login.

Pesquisei, mas não descobri como cadastrar novos médicos e pacientes, por conta do objeto Endereço, que têm outros campos com informações. Poderia me ajudar com a sintaxe para o MySql? Pelo Insomnia não dá e aparece o erro 403.

As informações são essas: Esse campo endereço que não achei como representar direto no MySql para fazer o cadastro.

"nome": "Carolina Souza",
"email": "carol.souza@voll.med",
"telefone": "93333-3332",
"crm": "333223",
"especialidade": "DERMATOLOGIA",
"endereco": {
    "logradouro": "rua 2",
    "bairro": "bairro",
    "cep": "92345678",
    "cidade": "Rio de Janeiro",
    "uf": "RJ",
    "numero": "3",
    "complemento": "complemento"

Você vai precisar cadastrar um usuário no banco de dados, para conseguir realizar login.

Isso foi mostrado no curso anterior: https://cursos.alura.com.br/course/spring-boot-aplique-boas-praticas-proteja-api-rest/task/117163

Professor, após consertar todas as questões relacionadas acima, o programa funcionou corretamente, ontem.Porém, hoje, quando fui fazer os testes mostrados em aula, outra vez tive problema ao tentar logar com o Insomnia, para gerar um novo token. Dá a mensagem:

Error 403, no Insomnia. java.lang.RuntimeException: Token JWT inválido ou expirado!

Eu casdatrei um novo usuário como foi comentou acima. Hoje, cadastrei mais um usuário, da forma correta, e mesmo assim, não consigo fazer o login para gerar um novo token.

Lembrando que na requisição de efetuar login você não deve enviar token. Somente nas outras requisições