Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

getReferenceById e getById

Não cosnegui entender exatamente a diferença entre os dois métodos.

4 respostas
solução!

Olá, Crisostomo! Tudo bem?

Os métodos getReferenceById e getById são utilizados em diferentes contextos dentro do Spring Boot. O método getReferenceById é utilizado para obter uma referência a um objeto a partir do seu ID, sem carregar todos os seus dados do banco de dados. Já o método getById é utilizado para obter o objeto completo a partir do seu ID, carregando todos os seus dados do banco de dados.

Um exemplo prático de utilização do método getReferenceById seria em um caso em que você precisa apenas da referência a um objeto para realizar uma operação, mas não precisa carregar todos os seus dados. Já o método getById seria utilizado em um caso em que você precisa de todos os dados do objeto para realizar uma operação.

Bons estudos!

Aproveitando.. Sou um desenvolvedor iniciante em Java e gostaria de compartilhar uma dúvida com vocês. Tenho uma classe chamada X, que possui diversos campos, incluindo um campo do tipo BLOB. Quando tento listar objetos dessa classe, sinto dificuldade devido à carga dos BLOBs, que acabam sendo carregados juntamente com os demais campos. Gostaria de saber se isso acontece porque cometi um erro de normalização, ou seja, deveria ter colocado o BLOB em uma tabela separada? Existe alguma forma de carregar o BLOB somente em determinados casos? Atualmente, para contornar o problema, faço uma queryNativa em que defino todos os campos BLOB como nulos, o que acelera o retorno da lista. Quando preciso do BLOB, abro apenas o registro correspondente (que é retornado sem o valor nulo).

Oi!

Não necessariamente é um erro de normalização colocar um campo BLOB em uma tabela. Normalmente, campos BLOB são usados para armazenar grandes quantidades de dados binários, como imagens, vídeos ou arquivos PDF. Se esses dados são essenciais para a funcionalidade da sua aplicação e fazem parte do objeto X, faz sentido manter o BLOB dentro da tabela X.

Mas pode ser que a carga dos BLOBs esteja prejudicando o desempenho da sua aplicação, sendo que uma alternativa para contornar esse problema é carregar os BLOBs apenas quando necessário. Isso pode ser feito via carregamento lazy da JPA:

@Lob
@Basic(fetch = FetchType.LAZY)
private byte[] foto;

Dessa forma, quando uma entidade for carregada, o atributo foto não será carregado junto. Se quiser trazer junto, você pode fazer uma consulta com JPQL.

Sim, porém ao enviar o DTO preciso enviar todos os dados, e ao chamar o Get, o hibernate vai carregar o blob, correto?