Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Erro na consulta

Pessoal, tudo bem? Estou enfrentando problemas com a classe agendamentoDeConsultas, irei deixar o erro aqui embaixo na descrição e irei deixar tbm o link do meu GitHub para voces poderem observar o meu projeto.

Link: https://github.com/YanVelasco/YanVelasco-med.voll-api

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'consultaController': Unsatisfied dependency expressed through field 'agendaDeConsultas': Error creating bean with name 'agendaDeConsultas': Unsatisfied dependency expressed through field 'medicoRepository': Error creating bean with name 'medicoRepository' defined in br.com.yanvelasco.api.domain.medico.repository.MedicoRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract br.com.yanvelasco.api.domain.medico.entity.Medico br.com.yanvelasco.api.domain.medico.repository.MedicoRepository.escolherMedicoPorEspecialidade(br.com.yanvelasco.api.domain.medico.entity.Especialidade,java.time.LocalDateTime); Reason: Validation failed for query for method public abstract br.com.yanvelasco.api.domain.medico.entity.Medico br.com.yanvelasco.api.domain.medico.repository.MedicoRepository.escolherMedicoPorEspecialidade(br.com.yanvelasco.api.domain.medico.entity.Especialidade,java.time.LocalDateTime)

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'agendaDeConsultas': Unsatisfied dependency expressed through field 'medicoRepository': Error creating bean with name 'medicoRepository' defined in br.com.yanvelasco.api.domain.medico.repository.MedicoRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract br.com.yanvelasco.api.domain.medico.entity.Medico br.com.yanvelasco.api.domain.medico.repository.MedicoRepository.escolherMedicoPorEspecialidade(br.com.yanvelasco.api.domain.medico.entity.Especialidade,java.time.LocalDateTime); Reason: Validation failed for query for method public abstract br.com.yanvelasco.api.domain.medico.entity.Medico br.com.yanvelasco.api.domain.medico.repository.MedicoRepository.escolherMedicoPorEspecialidade(br.com.yanvelasco.api.domain.medico.entity.Especialidade,java.time.LocalDateTime)

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'medicoRepository' defined in br.com.yanvelasco.api.domain.medico.repository.MedicoRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract br.com.yanvelasco.api.domain.medico.entity.Medico br.com.yanvelasco.api.domain.medico.repository.MedicoRepository.escolherMedicoPorEspecialidade(br.com.yanvelasco.api.domain.medico.entity.Especialidade,java.time.LocalDateTime); Reason: Validation failed for query for method public abstract br.com.yanvelasco.api.domain.medico.entity.Medico br.com.yanvelasco.api.domain.medico.repository.MedicoRepository.escolherMedicoPorEspecialidade(br.com.yanvelasco.api.domain.medico.entity.Especialidade,java.time.LocalDateTime)

Caused by: org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract br.com.yanvelasco.api.domain.medico.entity.Medico br.com.yanvelasco.api.domain.medico.repository.MedicoRepository.escolherMedicoPorEspecialidade(br.com.yanvelasco.api.domain.medico.entity.Especialidade,java.time.LocalDateTime); Reason: Validation failed for query for method public abstract br.com.yanvelasco.api.domain.medico.entity.Medico br.com.yanvelasco.api.domain.medico.repository.MedicoRepository.escolherMedicoPorEspecialidade(br.com.yanvelasco.api.domain.medico.entity.Especialidade,java.time.LocalDateTime)

Caused by: java.lang.IllegalArgumentException: Validation failed for query for method public abstract br.com.yanvelasco.api.domain.medico.entity.Medico br.com.yanvelasco.api.domain.medico.repository.MedicoRepository.escolherMedicoPorEspecialidade(br.com.yanvelasco.api.domain.medico.entity.Especialidade,java.time.LocalDateTime)

Caused by: org.hibernate.query.sqm.UnknownEntityException: Could not resolve root entity 'Medico'

6 respostas

Oi!

Caused by: org.hibernate.query.sqm.UnknownEntityException: Could not resolve root entity 'Medico'

Verifica se sua entidade Medico está com as anotações da JPA.

Olá! Ela está assim: package br.com.yanvelasco.api.domain.medico.entity;

import java.util.UUID;

import br.com.yanvelasco.api.domain.endereco.entity.Endereco; import br.com.yanvelasco.api.domain.medico.dto.AtualizarDadosMedicoDTO; import jakarta.persistence.Embedded; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Table; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor;

@Table(name = "medicos") @Entity(name = "medico") @Data @NoArgsConstructor @AllArgsConstructor @Builder public class Medico { @Id @GeneratedValue(strategy = GenerationType.UUID) private UUID id; private String nome; private String email; private String telefone; private String crm; @Enumerated(EnumType.STRING) private Especialidade especialidade; @Embedded private Endereco endereco; @Builder.Default private Boolean ativo = true;

public void atualizarMedicos(AtualizarDadosMedicoDTO atualizarDadosMedicoDTO){
    if (atualizarDadosMedicoDTO.nome() != null) {
        this.nome = atualizarDadosMedicoDTO.nome();
    }
    if (atualizarDadosMedicoDTO.telefone() != null) {
        this.telefone = atualizarDadosMedicoDTO.telefone();
    }
    if (atualizarDadosMedicoDTO.enderecoDTO() != null) {
        this.endereco.atulizarDadosEndereco(atualizarDadosMedicoDTO.enderecoDTO());
    }
}

public void excluir(){
    ativo = false;
}

}

solução!

Na sua entidade médico tem essa anotação: @Entity(name = "medico") Isso indica o nome da entidade para pesquisas com JPQL.

Então, todas as suas interfaces repository que fizerem referência a essa entidade devem seguir exatamente esse nome. O erro ocorre porque na sua interface MedicoRepository tem alguma consulta que está assim: from Medico m, mas na verdade deveria ser from medico m (medico em minúsculo, para ficar igual o @Entity da entidade)

O jeito mais fácil para resolver é alterar a anotação para: @Entity(name = "Medico"), assim não precisará mexer nas consultas nas interfaces repository.

Bons estudos!

Fiz isso aqui, mas ainda continua dando erro Tenta executar aí na sua máquina

https://github.com/YanVelasco/YanVelasco-med.voll-api

Tem que fazer o mesmo para as outras entidades: Paciente e Consulta

Muitoooo Obrigado Rodrigo, eu realmente dei uma bioada kkkkkkkkkkkk