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

Error al intentar ejecutar el test "seleccionarMedicoConEspecialidadEnFechaEscenario1"

Desde video anteriores, habia tenido problemas para guardar una consulta, sin embargo no di con el problema, al ejecutar la prueba me dio el siguiente error:

2024-07-13T15:22:41.859-06:00  WARN 9856 --- [api] [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1054, SQLState: 42S22
2024-07-13T15:22:41.859-06:00 ERROR 9856 --- [api] [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : Unknown column 'm' in 'field list'

org.springframework.dao.InvalidDataAccessResourceUsageException: JDBC exception executing SQL [select m from Medicos m
where m.activo=1
and
m.especialidad=?
and
m.id not in(
    select c.medicos.id from Consultas c
    where
    c.fecha=?
)
order by rand()
limit 1
] [Unknown column 'm' in 'field list'] [n/a]; SQL [n/a]

Caused by: org.hibernate.exception.SQLGrammarException: JDBC exception executing SQL [select m from Medicos m
where m.activo=1
and
m.especialidad=?
and
m.id not in(
    select c.medicos.id from Consultas c
    where
    c.fecha=?
)
order by rand()
limit 1
] [Unknown column 'm' in 'field list'] [n/a]

Revise mi codigo y donde indica el error que es el MedicoRepository en donde va la consulta a la base de datos tengo esto:

@Query(value = """
            select m from Medicos m
            where m.activo=1
            and
            m.especialidad=:especialidad
            and
            m.id not in(
                select c.medicos.id from Consultas c
                where
                c.fecha=:fecha
            )
            order by rand()
            limit 1
            """, nativeQuery = true)
    Medico seleccionarMedicoConEspecialidadEnFecha(Especialidad especialidad, LocalDateTime fecha);

Agradeceria mucho si me pudieran ayudar a ver donde tengo mi error

2 respuestas

Prueba a dejar tu consulta sin el nativeQuery

Asi quedaria

@Query(value = """
            select m from Medicos m
            where m.activo=1
            and
            m.especialidad=:especialidad
            and
            m.id not in(
                select c.medicos.id from Consultas c
                where
                c.fecha=:fecha
            )
            order by rand()
            limit 1
            """)

Yo tenia un error parecido, entonces en lugar de 1 usé true y esa fue la solición

@Query(value = """ select m from Medicos m where m.activo=true and m.especialidad=:especialidad and m.id not in( select c.medicos.id from Consultas c where c.fecha=:fecha ) order by rand() limit 1 """)