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();
     }
   }
 }