public void edit(TipoEstadoNormatividad tipoEstadoNormatividad) throws NonexistentEntityException, Exception { EntityManager em = null; try { em = getEntityManager(); em.getTransaction().begin(); TipoEstadoNormatividad persistentTipoEstadoNormatividad = em.find(TipoEstadoNormatividad.class, tipoEstadoNormatividad.getId()); List<Normatividad> normatividadListOld = persistentTipoEstadoNormatividad.getNormatividadList(); List<Normatividad> normatividadListNew = tipoEstadoNormatividad.getNormatividadList(); List<SeguimientoNormatividad> seguimientoNormatividadListOld = persistentTipoEstadoNormatividad.getSeguimientoNormatividadList(); List<SeguimientoNormatividad> seguimientoNormatividadListNew = tipoEstadoNormatividad.getSeguimientoNormatividadList(); List<Normatividad> attachedNormatividadListNew = new ArrayList<Normatividad>(); for (Normatividad normatividadListNewNormatividadToAttach : normatividadListNew) { normatividadListNewNormatividadToAttach = em.getReference( normatividadListNewNormatividadToAttach.getClass(), normatividadListNewNormatividadToAttach.getId()); attachedNormatividadListNew.add(normatividadListNewNormatividadToAttach); } normatividadListNew = attachedNormatividadListNew; tipoEstadoNormatividad.setNormatividadList(normatividadListNew); List<SeguimientoNormatividad> attachedSeguimientoNormatividadListNew = new ArrayList<SeguimientoNormatividad>(); for (SeguimientoNormatividad seguimientoNormatividadListNewSeguimientoNormatividadToAttach : seguimientoNormatividadListNew) { seguimientoNormatividadListNewSeguimientoNormatividadToAttach = em.getReference( seguimientoNormatividadListNewSeguimientoNormatividadToAttach.getClass(), seguimientoNormatividadListNewSeguimientoNormatividadToAttach.getId()); attachedSeguimientoNormatividadListNew.add( seguimientoNormatividadListNewSeguimientoNormatividadToAttach); } seguimientoNormatividadListNew = attachedSeguimientoNormatividadListNew; tipoEstadoNormatividad.setSeguimientoNormatividadList(seguimientoNormatividadListNew); tipoEstadoNormatividad = em.merge(tipoEstadoNormatividad); for (Normatividad normatividadListOldNormatividad : normatividadListOld) { if (!normatividadListNew.contains(normatividadListOldNormatividad)) { normatividadListOldNormatividad.setIdEstado(null); normatividadListOldNormatividad = em.merge(normatividadListOldNormatividad); } } for (Normatividad normatividadListNewNormatividad : normatividadListNew) { if (!normatividadListOld.contains(normatividadListNewNormatividad)) { TipoEstadoNormatividad oldIdEstadoOfNormatividadListNewNormatividad = normatividadListNewNormatividad.getIdEstado(); normatividadListNewNormatividad.setIdEstado(tipoEstadoNormatividad); normatividadListNewNormatividad = em.merge(normatividadListNewNormatividad); if (oldIdEstadoOfNormatividadListNewNormatividad != null && !oldIdEstadoOfNormatividadListNewNormatividad.equals(tipoEstadoNormatividad)) { oldIdEstadoOfNormatividadListNewNormatividad .getNormatividadList() .remove(normatividadListNewNormatividad); oldIdEstadoOfNormatividadListNewNormatividad = em.merge(oldIdEstadoOfNormatividadListNewNormatividad); } } } for (SeguimientoNormatividad seguimientoNormatividadListOldSeguimientoNormatividad : seguimientoNormatividadListOld) { if (!seguimientoNormatividadListNew.contains( seguimientoNormatividadListOldSeguimientoNormatividad)) { seguimientoNormatividadListOldSeguimientoNormatividad.setIdEstado(null); seguimientoNormatividadListOldSeguimientoNormatividad = em.merge(seguimientoNormatividadListOldSeguimientoNormatividad); } } for (SeguimientoNormatividad seguimientoNormatividadListNewSeguimientoNormatividad : seguimientoNormatividadListNew) { if (!seguimientoNormatividadListOld.contains( seguimientoNormatividadListNewSeguimientoNormatividad)) { TipoEstadoNormatividad oldIdEstadoOfSeguimientoNormatividadListNewSeguimientoNormatividad = seguimientoNormatividadListNewSeguimientoNormatividad.getIdEstado(); seguimientoNormatividadListNewSeguimientoNormatividad.setIdEstado(tipoEstadoNormatividad); seguimientoNormatividadListNewSeguimientoNormatividad = em.merge(seguimientoNormatividadListNewSeguimientoNormatividad); if (oldIdEstadoOfSeguimientoNormatividadListNewSeguimientoNormatividad != null && !oldIdEstadoOfSeguimientoNormatividadListNewSeguimientoNormatividad.equals( tipoEstadoNormatividad)) { oldIdEstadoOfSeguimientoNormatividadListNewSeguimientoNormatividad .getSeguimientoNormatividadList() .remove(seguimientoNormatividadListNewSeguimientoNormatividad); oldIdEstadoOfSeguimientoNormatividadListNewSeguimientoNormatividad = em.merge(oldIdEstadoOfSeguimientoNormatividadListNewSeguimientoNormatividad); } } } em.getTransaction().commit(); } catch (Exception ex) { String msg = ex.getLocalizedMessage(); if (msg == null || msg.length() == 0) { Integer id = tipoEstadoNormatividad.getId(); if (findTipoEstadoNormatividad(id) == null) { throw new NonexistentEntityException( "The tipoEstadoNormatividad with id " + id + " no longer exists."); } } throw ex; } finally { if (em != null) { em.close(); } } }