3
respostas

erro no medicoRepository

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

estou com esse erro como eu corrijo esse erro

3 respostas

Oi!

Manda aqui o código da sua interface MedicoRepository e da sua classe Medico

package med.voll.api.domain.medico;

import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query;

import java.time.LocalDateTime;

public interface MedicoRepository extends JpaRepository<Medico, Long> {

Page<Medico> findAllByAtivoTrue(Pageable paginacao);

@Query("""
  select m from Medico m
  where
  m.ativo = true
  and
  m.id not in(
    select c.medico.id from Consulta c
    where
    c.data = :data
  )
  m.especialidade = :especialidade
  order by rand()
  limit 1
  """)
Medico escolherMedicoAleatorioLivreNaData(Especialidade especialidade, LocalDateTime data);

@Query(""" select m.ativo from Medico m where m.id = :id """) Boolean findAtivoById(Long id); }

package med.voll.api.domain.medico;

import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; import med.voll.api.domain.endereco.Endereco;

@Table(name = "medicos") @Entity(name = "Medico") @Getter @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(of = "id") public class Medico {

@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String nome; private String email;

private String telefone; private String crm;

private Boolean ativo; @Enumerated(EnumType.STRING) private Especialidade especialidade;

@Embedded private Endereco endereco;

public Medico(DadosCadastroMedico dados) { this.ativo = true; this.nome = dados.nome(); this.email = dados.email(); this.telefone = dados.telefone(); this.crm = dados.crm(); this.especialidade = dados.especialidade(); this.endereco = new Endereco(dados.endereco()); }

public void atualizacaoMedicos(DadosAtualizacaoMedico dados) {
  if (dados.nome() != null) {
    this.nome = dados.nome();
  }
  if (dados.Telefone() != null) {
    this.telefone = dados.Telefone();
  }
  if (dados.endereco() != null) {
    this.endereco.atualizarInformacoes(dados.endereco());
  }
}

public void Excluir() { this.ativo = false; } }

O problema está na sua consulta:

@Query("""
  select m from Medico m
  where
  m.ativo = true
  and
  m.id not in(
    select c.medico.id from Consulta c
    where
    c.data = :data
  )
  m.especialidade = :especialidade
  order by rand()
  limit 1
  """)
Medico escolherMedicoAleatorioLivreNaData(Especialidade especialidade, LocalDateTime data);

Faltou o and ao filtrar pela especialidade.