ArrayList - Como persistir no Banco

10 respostas
H

Fala Gente!!

Num sistema de loja eletrônica tenho o pedido que é composto por vários itens de pedido.  tentando gravar o Item_Pedido, que é um arrayList do Pedido (1-n). Mas  apanhando. Monto o array e passo como parâmetro para a classe Item_PedidoFacade que fara a persistência do Item_Pedido. A montagem do array e passagem dele aomo argumento ficou assim:

public synchronized void CriaPedido(Pedido pedido, CarrinhoCompra carrinhoCompra, Correntista cfAux) { pedido.setCorrentista(cfAux); Status_PedidoFacade statusPedidoFacade = new Status_PedidoFacade(); pedido.setStatus_pedido(statusPedidoFacade.findByDescricao("aberto")); pedido.setValor_total(carrinhoCompra.getValor_total_item()); ArrayList itemPedido = new ArrayList(); try { HibernateUtil.beginTransaction(); Session session = HibernateUtil.currentSession(); Iterator itensCompra = carrinhoCompra.getItensCompra().iterator(); while (itensCompra.hasNext()) { Item_Pedido item = (Item_Pedido) itensCompra.next(); itemPedido.add(itensCompra); item.setProduto(item.getProduto()); item.setQuantidade(item.getQuantidade()); item.setValor_total_item(carrinhoCompra.getValor_total_item()); } } catch (Exception e) { } this.savePedido(pedido); Item_PedidoFacade itemPedidoFacade = new Item_PedidoFacade(); itemPedidoFacade.criaItem_Pedido((ArrayList) itemPedido); HibernateUtil.commitTransaction(); }

Tá dando erro na linha em vermelho…

O método criaItem_Pedido é esse:

public String criaItem_Pedido(ArrayList itemPedido[]){ saveItem_Pedido((ArrayList) itemPedido[0]); return "item_pedido_criado"; }

O método saveItem_Pedido()…

public void saveItem_Pedido(ArrayList[] itemPedido) { try{ HibernateUtil.beginTransaction(); Session session = HibernateUtil.currentSession(); for(int i =0; i < itemPedido.length; i++){ session.save((ArrayList[]) itemPedido); HibernateUtil.commitTransaction(); addMessage("Insert Item_Pedido Ok."); } }catch(HibernateException e){ //addMessage("Erro insert Item_Pedido!"); throw e; }finally{HibernateUtil.closeSession();} }

Não estou conseguindo resolver. Onde estou errando??

Valeu

10 Respostas

renomoto

kd o erro?

linha em vermelho??

ChronoTrigger

na linha 14
itemPedido.add(itensCompra);

pq vc está adicionando um objeto do tipo iterator no arraylist??

H

É só adicionar o objeto direto então?? Sou iniciante em java!!

ChronoTrigger

O iterator é só um objeto para vc navegar na sua lista.

na ultima linha do while provavelmente vc tem que adicionar o objeto que vc acabou de setar os valores.
No caso o item.

Há outra coisa estranha no código.

Pq vc fez um array de objetos ArrayList.

Quando vc faz uma declaração:
ArrayList itens[]; na verdade vc está criando um array de objetos arraylist.

Para criar um lista comum basta criar ArrayList itens = new ArrayList();

ArrayList é um objeto dinamico que tem funcinalidades parecidas com o array.

H

Blz. Mas como que faço, tô apanhando!! :cry: :oops:

ChronoTrigger

Vamos lá.
Eu não conheço nada do negócio. Mas aparentemente está vindo o carrinhoCompras carregado para o método
criaPedido.
Vc não tem que pegar os itensCarrinho e jogar dentro de itens do objeto pedido??
Se não for isso vou mostrar como ficaria a lógica caso o ´negócio estaja certo no seu código.

try{   
    HibernateUtil.beginTransaction();   
    Session session = HibernateUtil.currentSession();   
    Iterator itensCompra = carrinhoCompra.getItensCompra().iterator();   
       while(itensCompra.hasNext()) {   
        Item_Pedido item = (Item_Pedido) itensCompra.next();

//eu acredito que aqui vc já tem o item
//agora eu não sei oq vc tem que fazer com esse cara
// vc tem que setar ele no objeto Pedido???
//tem q salvar??
//tem que setar em outro objeto?
}

H

Então, já peguei os itens e joguei no pedido. Agora, preciso passar ele para a entidade Item_Pedido e gravar. Processo de pedido de compras (ou vendas) 1 pedido com vários itens. Pegou??

H

Aí entra o Item_PedidoFacade para gravar o famigerado, são os métodos que coloquei no início do Post!!

ChronoTrigger

Acho que fica assim, caso esteja certo aquilo que eu falei sobre o arrayList e array.

publicString criaItem_Pedido(ArrayList itemPedido){

saveItem_Pedido(itemPedido);

return"item_pedido_criado";
publicvoidsaveItem_Pedido(ArrayList itemPedido) {

try{

HibernateUtil.beginTransaction();

Session session = HibernateUtil.currentSession();

for(inti =0; i < itemPedido.size(); i++){

session.save(itemPedido);

HibernateUtil.commitTransaction();

addMessage(Insert Item_Pedido Ok.);

}

}catch(HibernateException e){

//addMessage(“Erro insert Item_Pedido!”);

throwe;

}finally{HibernateUtil.closeSession();}

}
ChronoTrigger

esqueci um detalhe

for(inti =0; i < itemPedido.size(); i++){

ItemPedido itemDoPedido = itemPedido.get(i);

session.save(itemDoPedido);

HibernateUtil.commitTransaction();

addMessage(Insert Item_Pedido Ok.);

}
Criado 14 de setembro de 2007
Ultima resposta 14 de set. de 2007
Respostas 10
Participantes 3