Hibernate: Persistência de composição

3 respostas
D
Olá galera..blz... bom to com uma hiper dúvida...pois não tenho noção de como fazer...é o seguinte tenho 02 classes no meu diagrama que se comunicam por composição (todo-parte) a classe todo é a ordem de serviço (OS) e a classe parte é uma coleção de serviços da ordem (servicoOs) ai como é composição quero persistir as 02 classes juntas para evitar margens de erros e tal...porem os dados da OS estão em um formulário e os dados dos serviços são chamados em outro formulário por um botão...aí to chamando desse jeito:
private void btnServicoActionPerformed(java.awt.event.ActionEvent evt) {                                           
        //chamando o form de serviços feitos na OS
        JDialog iDialog = new JDialog(jf, "Lista de Serviços", true);
        FormOsServico form = new FormOsServico();//instanciando o novo Form
        form.jd = iDialog;
        form.os1 = os1;//seta a OS no form de ServicoOs
               
        form.listaMestreServico.clear();
        form.listaMestreServico.addAll(os1.getServicoOs());
        
        iDialog.add(form);
        iDialog.pack();
        iDialog.setLocationRelativeTo(jf);
        iDialog.setVisible(true);

        // pegar a lista que foi criada/atualizada e colocar na OS
        os1.getServicoOs().clear();
        os1.getServicoOs().addAll( form.listaMestreServico );
       
        //na volta do form ele insere o valor no campos do form de OS
        float vlrServico = 0.0F;
        for(ServicoOs so : os1.getServicoOs())
           vlrServico += (so.getValorTotal()-so.getDesconto());

        os1.setPrecoServico(vlrServico);//pega o valor do form de Serviços

              os1.setValorTotal(vlrServico);
    }
dentro do form de servicoOs tem o botão de gravar que faz o seguinte código:
try {
            //combinar o objeto da listaMestre com o objeto q esta na tabela visual
            int posObjeto = tblMestreServico.getSelectedRow();//pega na tbl visual a linha seleciona
            ServicoOs entity = new ServicoOs();
            entity = listaMestreServico.get(posObjeto);
            entity.setOs(os1);
            
            if (validarObjeto(entity)) {
                  listaMestreServico.set(posObjeto, entity);
                  controle.setEditando(false);//ja salvou e agora desabilita o botão
            }
        } catch  (Exception e) {
            Dialogos.mensagem("Erro ao salvar: " + e.getMessage());
        }
    }
e quando volto pro form principal que é o da OS, na hora de persistir eu faço o seguinte:
private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        try {
            if(validarObjeto(os1)){//chama método que valida os objeto notNull
                EntityManager em = JPAUtil.getEm();
                em.getTransaction().begin();
                em.merge(os1);
                em.getTransaction().commit();
                //salvando os serviços na OS
                em.getTransaction().begin();
                em.merge(entity);//isso vem do form do servicoOs
                em.getTransaction().commit();

                jd.dispose();  // para fechar a janela
                Dialogos.mensagem("Dados salvos com sucesso!");
            }
            } catch  (Exception e) {
                Dialogos.mensagem("Erro ao salvar: " + e.getMessage());
        }
    }
Acredito que seja assim pra persistir uma composição com Hibernate..mas o entity que é passado não é reconhecido pelo form de Os... oq q eu faço pessoal???? Alguém pode me ajudar em relação a isso e me dizer se estou no caminho certo pra persistir composição???Please!!!

Obrigado galera!

3 Respostas

Paulo_Silveira

ola debora. o que quis dizer com “entity que é passado não é reconhecido pelo form de Os”? que erro da? stacktrace?

D

Olá Paulo Silveira…o erro é o seguinte:
“cannot find symbol
symbol: variable entity
location: class.servicesystem.formularios.FormOsManutencao”

e a visibilidade da variavel esta como public…

D

Ah Paulo…outra dúvida q surgiu agora…e na hora de excluir esses dados da composição que ainda não foram persistidos no banco?to tentando excluir somente da jTable, na parte visual mesmo…pq pelo meu entendimento eles ainda não estão gravados no banco…é isso mesmo??

Criado 3 de novembro de 2009
Ultima resposta 4 de nov. de 2009
Respostas 3
Participantes 2