Retornando Objetos Hibernate HQL

6 respostas
R

Bom, tenho a seguinte questão: Tenho uma Classe Venda e ItemVenda.

Quando faço o HQL abaixo, se uma venda tiver 20 itens, ele retorna 20 Objetos pra mim.

SELECT venda FROM Venda venda 
   JOIN FETCH venda.itens itens  
  WHERE venda.id = 200

Porém o que eu quero é que ele retorne apenas 1 objeto VENDA populado com esses 20 itens no atributo : itens (que é um Set).

Como fazer ?

6 Respostas

A

Tenta ver se o DISTINCT resolve:

SELECT DISTINCT  venda FROM Venda venda   
JOIN FETCH venda.itens itens    
WHERE venda.id = 200

Isso faz com que a venda seja retornada com seus itens já carregados.

R

Eu não entendi porque ele não retorna 1 Venda popula com vários itens ? Ele retorna 20 vendas.

drsmachado

ayslanms:
Tenta ver se o DISTINCT resolve:

SELECT DISTINCT  venda FROM Venda venda   
JOIN FETCH venda.itens itens    
WHERE venda.id = 200

Isso faz com que a venda seja retornada com seus itens já carregados.


A classe Venda possui uma coleção de ItemVenda? Se possuir o fetch join é desnecessário, basta dizer a forma de carregamento, lazy ou eager.

drsmachado

Outra coisa, não abra vários tópicos sobre o mesmo assunto, você já havia aberto um sobre este problema pela manhã. Aguarde as respostas.

R

Você quer dizer que se eu fizer:

SELECT venda FROM Venda venda WHERE venda.id = 200

Eu posso fazer no meu código:

for(Venda venda: listVenda){
   for(ItemVenda item: venda.getItens()){
      System.out.println(item.getNome());
  }
}

Certo ?

drsmachado

rlanhellas:
Você quer dizer que se eu fizer:

SELECT venda FROM Venda venda WHERE venda.id = 200

Eu posso fazer no meu código:

for(Venda venda: listVenda){
   for(ItemVenda item: venda.getItens()){
      System.out.println(item.getNome());
  }
}

Certo ?


Sim!

Criado 11 de julho de 2013
Ultima resposta 11 de jul. de 2013
Respostas 6
Participantes 3