Problemas com edit

2 respostas
uchiharussi

Olaa pessoal

Estou fazendo um projeto e preciso tela de edicao dos dados, estou usando o hibernate para fazer isso e o seguinte metodo:

public void edit(Login login) throws IllegalOrphanException, NonexistentEntityException, Exception {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Login persistentLogin = em.find(Login.class, login.getId());
            Collection<ControleSistemasAUD> controleSistemasAUDCollectionOld = persistentLogin.getControleSistemasAUDCollection();
            Collection<ControleSistemasAUD> controleSistemasAUDCollectionNew = login.getControleSistemasAUDCollection();
            Collection<ControleSistemas> controleSistemasCollectionOld = persistentLogin.getControleSistemasCollection();
            Collection<ControleSistemas> controleSistemasCollectionNew = login.getControleSistemasCollection();
            List<String> illegalOrphanMessages = null;
            for (ControleSistemasAUD controleSistemasAUDCollectionOldControleSistemasAUD : controleSistemasAUDCollectionOld) {
                if (!controleSistemasAUDCollectionNew.contains(controleSistemasAUDCollectionOldControleSistemasAUD)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain ControleSistemasAUD " + controleSistemasAUDCollectionOldControleSistemasAUD + " since its tecnico field is not nullable.");
                }
            }
            for (ControleSistemas controleSistemasCollectionOldControleSistemas : controleSistemasCollectionOld) {
                if (!controleSistemasCollectionNew.contains(controleSistemasCollectionOldControleSistemas)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain ControleSistemas " + controleSistemasCollectionOldControleSistemas + " since its tecnico field is not nullable.");
                }
            }
            if (illegalOrphanMessages != null) {
                throw new IllegalOrphanException(illegalOrphanMessages);
            }
            Collection<ControleSistemasAUD> attachedControleSistemasAUDCollectionNew = new ArrayList<ControleSistemasAUD>();
            for (ControleSistemasAUD controleSistemasAUDCollectionNewControleSistemasAUDToAttach : controleSistemasAUDCollectionNew) {
                controleSistemasAUDCollectionNewControleSistemasAUDToAttach = em.getReference(controleSistemasAUDCollectionNewControleSistemasAUDToAttach.getClass(), controleSistemasAUDCollectionNewControleSistemasAUDToAttach.getId());
                attachedControleSistemasAUDCollectionNew.add(controleSistemasAUDCollectionNewControleSistemasAUDToAttach);
            }
            controleSistemasAUDCollectionNew = attachedControleSistemasAUDCollectionNew;
            login.setControleSistemasAUDCollection(controleSistemasAUDCollectionNew);
            Collection<ControleSistemas> attachedControleSistemasCollectionNew = new ArrayList<ControleSistemas>();
            for (ControleSistemas controleSistemasCollectionNewControleSistemasToAttach : controleSistemasCollectionNew) {
                controleSistemasCollectionNewControleSistemasToAttach = em.getReference(controleSistemasCollectionNewControleSistemasToAttach.getClass(), controleSistemasCollectionNewControleSistemasToAttach.getId());
                attachedControleSistemasCollectionNew.add(controleSistemasCollectionNewControleSistemasToAttach);
            }
            controleSistemasCollectionNew = attachedControleSistemasCollectionNew;
            login.setControleSistemasCollection(controleSistemasCollectionNew);
            login = em.merge(login);
            for (ControleSistemasAUD controleSistemasAUDCollectionNewControleSistemasAUD : controleSistemasAUDCollectionNew) {
                if (!controleSistemasAUDCollectionOld.contains(controleSistemasAUDCollectionNewControleSistemasAUD)) {
                    Login oldTecnicoOfControleSistemasAUDCollectionNewControleSistemasAUD = controleSistemasAUDCollectionNewControleSistemasAUD.getTecnico();
                    controleSistemasAUDCollectionNewControleSistemasAUD.setTecnico(login);
                    controleSistemasAUDCollectionNewControleSistemasAUD = em.merge(controleSistemasAUDCollectionNewControleSistemasAUD);
                    if (oldTecnicoOfControleSistemasAUDCollectionNewControleSistemasAUD != null && !oldTecnicoOfControleSistemasAUDCollectionNewControleSistemasAUD.equals(login)) {
                        oldTecnicoOfControleSistemasAUDCollectionNewControleSistemasAUD.getControleSistemasAUDCollection().remove(controleSistemasAUDCollectionNewControleSistemasAUD);
                        oldTecnicoOfControleSistemasAUDCollectionNewControleSistemasAUD = em.merge(oldTecnicoOfControleSistemasAUDCollectionNewControleSistemasAUD);
                    }
                }
            }
            for (ControleSistemas controleSistemasCollectionNewControleSistemas : controleSistemasCollectionNew) {
                if (!controleSistemasCollectionOld.contains(controleSistemasCollectionNewControleSistemas)) {
                    Login oldTecnicoOfControleSistemasCollectionNewControleSistemas = controleSistemasCollectionNewControleSistemas.getTecnico();
                    controleSistemasCollectionNewControleSistemas.setTecnico(login);
                    controleSistemasCollectionNewControleSistemas = em.merge(controleSistemasCollectionNewControleSistemas);
                    if (oldTecnicoOfControleSistemasCollectionNewControleSistemas != null && !oldTecnicoOfControleSistemasCollectionNewControleSistemas.equals(login)) {
                        oldTecnicoOfControleSistemasCollectionNewControleSistemas.getControleSistemasCollection().remove(controleSistemasCollectionNewControleSistemas);
                        oldTecnicoOfControleSistemasCollectionNewControleSistemas = em.merge(oldTecnicoOfControleSistemasCollectionNewControleSistemas);
                    }
                }
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            String msg = ex.getLocalizedMessage();
            if (msg == null || msg.length() == 0) {
                Integer id = login.getId();
                if (findLogin(id) == null) {
                    throw new NonexistentEntityException("The login with id " + id + " no longer exists.");
                }
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

Onde ControleSistemas eh uma tabela onde tem uma foreignKey de login, ou seja o id do login estao relacionado com o campo idtecnico na tabela ControleSistemas
Esse eh o codigo de edicao

E Esse eh o codigo que chama a edicao

Login nLogin = controle.findLogin(Integer.parseInt(labelID.getText()));
        nLogin.setLogin(textologin.getText());
        nLogin.setNome(textonome.getText());
        if (senha1.getText().equalsIgnoreCase(senha2.getText())){
            nLogin.setSenha(senha1.getText());
        }
        
        nLogin.setTipo(textotipo.getText());
        
        if (nLogin.getId() != null ){

             try {
                controle.edit(nLogin);
            } catch (IllegalOrphanException ex) {
                Logger.getLogger(formEditLogin.class.getName()).log(Level.SEVERE, null, ex);
            } catch (NonexistentEntityException ex) {
                Logger.getLogger(formEditLogin.class.getName()).log(Level.SEVERE, null, ex);
            } catch (Exception ex) {
                Logger.getLogger(formEditLogin.class.getName()).log(Level.SEVERE, null, ex);
            }
            
            } else {
               JOptionPane.showMessageDialog(this,"nenhum login selecionado!");
            }

Se alguem poder ajudar agradeco :D

2 Respostas

pedroroxd

OMFG
Não tem como dar uma reduzida nos nomes não?
Isso é feio: controleSistemasAUDCollectionNewControleSistemasAUDToAttach

uchiharussi

É o hibernate que cria os nomes :smiley:

Criado 17 de março de 2010
Ultima resposta 18 de mar. de 2010
Respostas 2
Participantes 2