public void edit(TipoClasePuc tipoClasePuc) throws NonexistentEntityException, Exception {
   EntityManager em = null;
   try {
     em = getEntityManager();
     em.getTransaction().begin();
     TipoClasePuc persistentTipoClasePuc = em.find(TipoClasePuc.class, tipoClasePuc.getId());
     List<ClasePuc> clasePucListOld = persistentTipoClasePuc.getClasePucList();
     List<ClasePuc> clasePucListNew = tipoClasePuc.getClasePucList();
     List<ClasePuc> attachedClasePucListNew = new ArrayList<ClasePuc>();
     for (ClasePuc clasePucListNewClasePucToAttach : clasePucListNew) {
       clasePucListNewClasePucToAttach =
           em.getReference(
               clasePucListNewClasePucToAttach.getClass(),
               clasePucListNewClasePucToAttach.getId());
       attachedClasePucListNew.add(clasePucListNewClasePucToAttach);
     }
     clasePucListNew = attachedClasePucListNew;
     tipoClasePuc.setClasePucList(clasePucListNew);
     tipoClasePuc = em.merge(tipoClasePuc);
     for (ClasePuc clasePucListOldClasePuc : clasePucListOld) {
       if (!clasePucListNew.contains(clasePucListOldClasePuc)) {
         clasePucListOldClasePuc.setIdClase(null);
         clasePucListOldClasePuc = em.merge(clasePucListOldClasePuc);
       }
     }
     for (ClasePuc clasePucListNewClasePuc : clasePucListNew) {
       if (!clasePucListOld.contains(clasePucListNewClasePuc)) {
         TipoClasePuc oldIdClaseOfClasePucListNewClasePuc = clasePucListNewClasePuc.getIdClase();
         clasePucListNewClasePuc.setIdClase(tipoClasePuc);
         clasePucListNewClasePuc = em.merge(clasePucListNewClasePuc);
         if (oldIdClaseOfClasePucListNewClasePuc != null
             && !oldIdClaseOfClasePucListNewClasePuc.equals(tipoClasePuc)) {
           oldIdClaseOfClasePucListNewClasePuc.getClasePucList().remove(clasePucListNewClasePuc);
           oldIdClaseOfClasePucListNewClasePuc = em.merge(oldIdClaseOfClasePucListNewClasePuc);
         }
       }
     }
     em.getTransaction().commit();
   } catch (Exception ex) {
     String msg = ex.getLocalizedMessage();
     if (msg == null || msg.length() == 0) {
       Integer id = tipoClasePuc.getId();
       if (findTipoClasePuc(id) == null) {
         throw new NonexistentEntityException(
             "The tipoClasePuc with id " + id + " no longer exists.");
       }
     }
     throw ex;
   } finally {
     if (em != null) {
       em.close();
     }
   }
 }
 public void create(TipoClasePuc tipoClasePuc) throws PreexistingEntityException, Exception {
   if (tipoClasePuc.getClasePucList() == null) {
     tipoClasePuc.setClasePucList(new ArrayList<ClasePuc>());
   }
   EntityManager em = null;
   try {
     em = getEntityManager();
     em.getTransaction().begin();
     List<ClasePuc> attachedClasePucList = new ArrayList<ClasePuc>();
     for (ClasePuc clasePucListClasePucToAttach : tipoClasePuc.getClasePucList()) {
       clasePucListClasePucToAttach =
           em.getReference(
               clasePucListClasePucToAttach.getClass(), clasePucListClasePucToAttach.getId());
       attachedClasePucList.add(clasePucListClasePucToAttach);
     }
     tipoClasePuc.setClasePucList(attachedClasePucList);
     em.persist(tipoClasePuc);
     for (ClasePuc clasePucListClasePuc : tipoClasePuc.getClasePucList()) {
       TipoClasePuc oldIdClaseOfClasePucListClasePuc = clasePucListClasePuc.getIdClase();
       clasePucListClasePuc.setIdClase(tipoClasePuc);
       clasePucListClasePuc = em.merge(clasePucListClasePuc);
       if (oldIdClaseOfClasePucListClasePuc != null) {
         oldIdClaseOfClasePucListClasePuc.getClasePucList().remove(clasePucListClasePuc);
         oldIdClaseOfClasePucListClasePuc = em.merge(oldIdClaseOfClasePucListClasePuc);
       }
     }
     em.getTransaction().commit();
   } catch (Exception ex) {
     if (findTipoClasePuc(tipoClasePuc.getId()) != null) {
       throw new PreexistingEntityException(
           "TipoClasePuc " + tipoClasePuc + " already exists.", ex);
     }
     throw ex;
   } finally {
     if (em != null) {
       em.close();
     }
   }
 }