Bom galera, estou com o seguinte erro,
Já pensei diversas vezes como resolver, mas quero saber a melhor,
Tenho uma entidade compra, esta compra tem Entrega logo CompraEntrega - CompraEntrega tem Itens… Mas neste nível está tranquilo, quero chegar neste nível:
Qual a melhor forma de trazer este ID sem ter que ficar fazendo vários Loads?
Vc tem que sempre fazer esse caminho?
Você poderia fazer um JPQL aí. [=
Poxa, nunca tinha “ouvido” falar nisso! Mas Fiz a seguinte Query:
session.createQuery("SELECT c FROM Compra c JOIN c.itens ci JOIN ci.item.mpfornecedor mpf JOIN mpf.id.materiaPrima mpfa JOIN mpfa.materiaPrima m WHERE c.id = :compraID").setParameter("compraID", compra.getId()).list();
Pergunta:
-
Se eu informo o parametro c (Select c) ele traz várias outras queries juntas - e não somente esta que eu estou pedindo, como fazer para que ele não traga informações de outras classes que eu não quero usar. - Como otimizar minhas queries para trazer somente os objetos que eu preciso, e não todas as suas dependências?
-
caso eu queria trazer o valor de todas as classes, c.id, ci.id, mpf.id por exemplo, como eu tenho o retorno disto? Sendo que select c é um tipo (Compra) .list();
Exemplo:
(Compra) session.createQuery("SELECT c FROM Compra c JOIN c.itens ci JOIN ci.item.mpfornecedor mpf JOIN mpf.id.materiaPrima mpfa JOIN mpfa.materiaPrima m WHERE c.id = :compraID").setParameter("compraID", compra.getId()).list();
Você precisaria deixa, por exemplo, sua lista como LAZY @OneToMany List carros; O default já é lazy.
Caso você faça select p from Pessoa p você não irá fazer o load do carro. Caso você queira fazer o load do carro, basta fazer select p from Pessoa p join fetch p.carros.