Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

No me funciona el GET

@GetMapping public List listadoMedicos() { List medicos = medicoRepository.findAll(); System.out.println(medicos); return medicos; }

Insomnia 
{
"timestamp": "2023-09-26T02:19:57.430+00:00",
"status": 500,
"error": "Internal Server Error",
"trace": "java.lang.ArrayIndexOutOfBoundsException: Index 49 out of bounds for length 4\r\n\tat org.hibernate.type.descriptor.java.EnumJavaType.fromInteger(EnumJavaType.java:194)\r\n\tat org.hibernate.type.descriptor.java.EnumJavaType.fromOrdinal(EnumJavaType.java:211)\r\n\tat org.hibernate.type.descriptor.converter.internal.OrdinalEnumValueConverter.toDomainValue(OrdinalEnumValueConverter.java:40)\r\n\tat
2 respuestas
solución!

Hola Cristian,

Por el error que estás obteniendo, parece que hay un problema con un valor de tipo Enum en tu base de datos que está fuera del rango permitido. El error ArrayIndexOutOfBoundsException indica que estás intentando acceder a un elemento de un array que está fuera de sus límites. En este caso, parece que estás intentando acceder al índice 49 de un array que solo tiene una longitud de 4.

El problema puede estar en cómo se guardan o se recuperan los datos de tipo Enum en tu base de datos. Hibernate suele manejar los tipos Enum de dos formas: como un String (el nombre del Enum) o como un Integer (la posición del Enum). Si se guarda como un Integer y luego se intenta recuperar como un String (o viceversa), puedes obtener este tipo de error.

Revisa tu base de datos y verifica cómo se están guardando estos valores Enum. Si se guardan como Integer, asegúrate de que no estás intentando guardar un valor que exceda la cantidad de valores en tu Enum. Si se guardan como String, asegúrate de que estás guardando el nombre correcto del Enum.

Por ejemplo, si tienes un Enum así:

public enum Status {
    ACTIVO, 
    INACTIVO, 
    PENDIENTE, 
    ELIMINADO
}

Si se guarda como Integer, los valores permitidos serán 0, 1, 2 y 3. Si intentas guardar un 4 o un 49, obtendrás un error. Si se guarda como String, los valores permitidos serán "ACTIVO", "INACTIVO", "PENDIENTE" y "ELIMINADO". Si intentas guardar cualquier otra cosa, también obtendrás un error.

Espero haber ayudado y buenos estudios!

Correcto revisando el codigo en la clase medico no habia adicionado Enumerated(EnumType.STRING)

adjunto como debo quedar para proximas personas que tengan el mismo error

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String nombre;
private String email;
private String telefono;
private String documento;
@Enumerated(EnumType.STRING)
private Especialidad especialidad;
@Embedded
private Direccion direccion;