Valor de Varias Subclasses de uma entidade -

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:

  1. 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?

  2. 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.