Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
4
respuestas

ERROR - UnsatisfiedDependencyException - Especialidad

Hola a todos, tengo este problema cuando ejecuto el programa en el minuto 3:22

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: 

Error creating bean with name 'consultaController': Unsatisfied dependency expressed through field 'service': Error creating bean with name 'agendaDeConsultaService': Unsatisfied dependency expressed through field 'medicoRepository': 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.seleccionarMedicoConEspecialidadEnFecha(med.voll.api.domain.medico.Especialidad,java.time.LocalDateTime); **Reason: Validation failed for query for method public abstract med.voll.api.domain.medico.Medico med.voll.api.domain.medico.MedicoRepository.seleccionarMedicoConEspecialidadEnFecha(med.voll.api.domain.medico.Especialidad,java.time.LocalDateTime)**

Me di cuenta que el error de alguna forma se produce en el Repositorio Medico, en su método Especialidad

Lo que tambien produce este mismom error 3 veces aprox:

Caused by: java.lang.IllegalArgumentException: org.hibernate.query.sqm.InterpretationException: Error interpreting query [select m from Medico m
where m.activo= 1
and
m.especialidad=:especialidad
and
m.id not in(
    select c.medico.id from Consulta c
    where
    c.fecha=:fecha
)
order by rand()
limit 1
]; this may indicate a semantic (user query) problem or a bug in the parser [select m from Medico m
where m.activo= 1
and
m.especialidad=:especialidad
and
m.id not in(
    select c.medico.id from Consulta c
    where
    c.fecha=:fecha
)
order by rand()
limit 1
]

Y como ultimo te lanza este error relacionado al activo de medico, un error de comparar un Boolean con un Int:

Caused by: java.lang.IllegalArgumentException: Can't compare test expression of type [BasicSqmPathSource(activo : Boolean)] with element of type [basicType@15(java.lang.Integer,4)]

Este es mi metodo en MedicoRepository, mismo que esta en haga lo mismo en clase :

@Query("""
       select m from Medico m
       where m.activo= 1
       and
       m.especialidad=:especialidad
       and
       m.id not in( 
           select c.medico.id from Consulta c
           where
           c.fecha=:fecha
       )
       order by rand()
       limit 1
       """)
    Medico seleccionarMedicoConEspecialidadEnFecha(Especialidad especialidad, LocalDateTime fecha);

Los detalles de mi proyecto:

  1. Si tienen las anotaciones el MedicoRepository y otros
  2. El atributo activo es Boolan en la base de datos como en la Clase Medico, solo en la query se compara como si fuera int

Ojala me puedan ayudar

4 respuestas

Ya me di cuenta el problema y ejecute la solución, el primer paso es cambiar el 1 por true dado que no puedes comparar 2 tipos diferentes, al menos que parses uno, el otro es que había escrito "c.fecha=:fecha" cuando en realidad era c.data=:fecha por la estructura en la query atributoDB:nombreVariable

Hola, tengo el mismo inconveniente con el 1, pero me gustaría saber si está bien solucionado o generará inconvenientes mas adelante. De ante mano, gracias por la respuesta.

Por el momento no me ha dado ningún problema, dado que es un valor dado estáticamente. Inténtalo y dime que pasó.

Buenas tardes, muchas gracias Vicente muy atinados y efectivos tus comentarios, saludos