Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Qual usar? getReferenceById ou findById

Implementei o findbyId e reparei que o retorno é bem parecido, entretanto utilizando o getReferenceById recebemos o erro EntityNotFound: Print do código com a implementação da busca utilizando getReferenceById e mostrando o erro EntityNotFound ao passar um id sem registro

Já ao utilizar o findById eu consigo fazer a validação se foi encontrado algo e especificar qual erro quero lançar: Print do código com a implementação da busca utilizando findById e mostrando o erro NoSuchElement ao passar um id sem registro

É possível especificar qual erro enviar ao utilizar o getReferenceById sem utilizar try-catch? Em questão de boa prática, qual devo utilizar?

1 resposta
solução!

Oi Matheus,

A diferença entre eles acontece "por baixo dos panos", sendo um detalhe da JPA e não do Spring em si:

getReferenceById chama o método getReference do EntityManager, que lança uma exception se a entidade não existir no banco de dados. Caso ela exista, um proxy será devolvido e não a entidade em si(carregamento LAZY).

findById chama o método find do EntityManager, que retorna null se a entidade não existir no banco de dados. Caso ela exista, será carregada completa do banco e devolvida(carregamento EAGER).

Se você está carregando uma entidade apenas para a relacionar com outra entidade, sem a necessidade de acessar os atributos dela, então o ideal é chamar o método getReferenceById.

Bons estudos!