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

[Bug] Erro com a @Query()

Estou recebdno essa stack trace `Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2024-07-02T18:29:51.641-03:00 ERROR 12424 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'agentaConsulta': Unsatisfied dependency expressed through field 'medicoRepository': Error creating bean with name 'medicoRepository' defined in med.absolut.api.medico.MedicoRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract med.absolut.api.medico.Medico med.absolut.api.medico.MedicoRepository.escolherMedicoAleatoriamente(med.absolut.api.medico.Especialidades,java.time.LocalDateTime); Reason: Validation failed for query for method public abstract med.absolut.api.medico.Medico med.absolut.api.medico.MedicoRepository.escolherMedicoAleatoriamente(med.absolut.api.medico.Especialidades,java.time.LocalDateTime) Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'medicoRepository' defined in med.absolut.api.medico.MedicoRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract med.absolut.api.medico.Medico med.absolut.api.medico.MedicoRepository.escolherMedicoAleatoriamente(med.absolut.api.medico.Especialidades,java.time.LocalDateTime); Reason: Validation failed for query for method public abstract med.absolut.api.medico.Medico med.absolut.api.medico.MedicoRepository.escolherMedicoAleatoriamente(med.absolut.api.medico.Especialidades,java.time.LocalDateTime) Caused by: org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract med.absolut.api.medico.Medico med.absolut.api.medico.MedicoRepository.escolherMedicoAleatoriamente(med.absolut.api.medico.Especialidades,java.time.LocalDateTime); Reason: Validation failed for query for method public abstract med.absolut.api.medico.Medico med.absolut.api.medico.MedicoRepository.escolherMedicoAleatoriamente(med.absolut.api.medico.Especialidades,java.time.LocalDateTime) Caused by: java.lang.IllegalArgumentException: Validation failed for query for method public abstract med.absolut.api.medico.Medico med.absolut.api.medico.MedicoRepository.escolherMedicoAleatoriamente(med.absolut.api.medico.Especialidades,java.time.LocalDateTime) Caused by: java.lang.IllegalArgumentException: org.hibernate.query.SemanticException: Cannot compare left expression of type 'java.lang.Boolean' with right expression of type 'java.lang.Integer' Caused by: org.hibernate.query.SemanticException: Cannot compare left expression of type 'java.lang.Boolean' with right expression of type 'java.lang.Integer' ` e tambem estou em duvida em relação ao construtor da Consulta, segue o print: Insira aqui a descrição dessa imagem para ajudar na acessibilidade e na classe da consulta eu estou usando o @AllArgsConstructor

4 respostas

Oi!

Na interface MedicoRepository altere a query onde tem m.ativo = 1 para: m.ativo = true

Manda aqui a sua classe Consulta.

package med.absolut.api.consulta;

import java.time.LocalDateTime;

import jakarta.persistence.Entity; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; import med.absolut.api.medico.Medico; import med.absolut.api.paciente.Paciente;

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

@Id @GeneratedValue(strategy = GenerationType.IDENTITY) 
private long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "medicos_id")
private Medico medico;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "pacientes_id")
private Paciente paciente;

private LocalDateTime data;

}

solução!

Seu atributo id está como long (primitivo) ao invés de Long

Obrigado professor, eu tinha colocado um cast Long no null e tambem funcionou