Olá, Luiz! Tudo bem? Espero que sim!
Os métodos findById
e getReferenceById
têm funções parecidas, mas existem algumas diferenças entre eles.
O findById
é um método que busca no banco de dados a entidade com o ID especificado. Se a entidade existir, ele retorna um Optional
dessa entidade. Caso contrário, retorna um Optional
vazio. É por isso que você vê o método .get()
sendo usado após o findById
, pois é necessário extrair a entidade do Optional
.
Já o método getReferenceById
é um pouco diferente. Ele retorna uma referência para a entidade sem realmente buscar no banco de dados. Isso é útil quando você não precisa dos dados da entidade imediatamente, mas em algum momento no futuro. No entanto, se a entidade não existir, um erro será lançado quando você tentar acessar os dados.
No seu caso, acredito que o findById
é mais apropriado, pois você precisa dos dados do paciente para criar a consulta. Se você usar o getReferenceById
, pode acabar com um erro mais tarde se o paciente não existir.
Aqui está um exemplo para ilustrar a diferença:
// Com findById
var paciente = pacienteRepository.findById(dados.idPaciente());
if (paciente.isPresent()) {
var consulta = new Consulta(null, medico, paciente.get(), dados.data());
consultaRepository.save(consulta);
} else {
// Trate o caso em que o paciente não existe
}
// Com getReferenceById
try {
var paciente = pacienteRepository.getReferenceById(dados.idPaciente());
var consulta = new Consulta(null, medico, paciente, dados.data());
consultaRepository.save(consulta);
} catch (EntityNotFoundException e) {
// Trate o caso em que o paciente não existe
}
Caso tenha dúvidas, fico à disposição!
Espero ter ajudado.
Abraços e bons estudos!