Seguindo, acredito eu, minuciosamente as instruções da aula, ao criar o endpoint de listagem, obtive o seguinte erro:
java.lang.ArrayIndexOutOfBoundsException: Index 51 out of bounds for length 4
at org.hibernate.type.descriptor.java.EnumJavaType.fromInteger(EnumJavaType.java:194) ~[hibernate-core-6.2.2.Final.jar:6.2.2.Final]
Reparei que os endpoints para pacientes funcionavam perfeitamente, utilizando a mesma estratégia da aula. Testei, então, dropar o database e criá-lo novamente, porém sem a coluna de especialidades médicas (Enum no java). Com isso, o código para listagem dos médicos também funcionou. Ao recriar o database, novamente utilizando o Enum, o erro retornou. Gostaria de orientação de onde posso ter errado.
@RestController
@RequestMapping("/medicos")
public class MedicoController {
@Autowired
private MedicoRepository repository;
@PostMapping
@Transactional
public void Cadastrar(@RequestBody @Valid DadosCadastroMedico dados){
repository.save(new Medico(dados));
}
@GetMapping
public List<DadosListagemMedico> Listar(){
return repository.findAll().stream().map(DadosListagemMedico::new).toList();
}
}
public interface MedicoRepository extends JpaRepository<Medico, Long> {
}
public record DadosListagemMedico(String nome, String email, String crm, Especialidade especialidade) {
public DadosListagemMedico(Medico medico){
this(medico.getNome(), medico.getEmail(), medico.getCrm(), medico.getEspecialidade());
}
}
public record DadosCadastroMedico(
@NotBlank
String nome,
@NotBlank @Email
String email,
@NotBlank
String telefone,
@NotBlank @Pattern(regexp = "\\d{4,6}")
String crm,
@NotNull
Especialidade especialidade,
@NotNull @Valid
DadosEndereco 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 crm;
private String telefone;
@Enumerated(EnumType.ORDINAL)
private Especialidade especialidade;
@Embedded
private Endereco endereco;
public Medico(DadosCadastroMedico dados) {
this.nome = dados.nome();
this.email = dados.email();
this.crm = dados.crm();
this.endereco = new Endereco(dados.endereco());
this.especialidade = dados.especialidade();
this.telefone = dados.telefone();
}
}