public void create(Tipo tipo) {
   if (tipo.getInstitucionCollection() == null) {
     tipo.setInstitucionCollection(new ArrayList<Institucion>());
   }
   EntityManager em = null;
   try {
     em = getEntityManager();
     em.getTransaction().begin();
     Collection<Institucion> attachedInstitucionCollection = new ArrayList<Institucion>();
     for (Institucion institucionCollectionInstitucionToAttach : tipo.getInstitucionCollection()) {
       institucionCollectionInstitucionToAttach =
           em.getReference(
               institucionCollectionInstitucionToAttach.getClass(),
               institucionCollectionInstitucionToAttach.getId());
       attachedInstitucionCollection.add(institucionCollectionInstitucionToAttach);
     }
     tipo.setInstitucionCollection(attachedInstitucionCollection);
     em.persist(tipo);
     for (Institucion institucionCollectionInstitucion : tipo.getInstitucionCollection()) {
       Tipo oldTipoIdOfInstitucionCollectionInstitucion =
           institucionCollectionInstitucion.getTipoId();
       institucionCollectionInstitucion.setTipoId(tipo);
       institucionCollectionInstitucion = em.merge(institucionCollectionInstitucion);
       if (oldTipoIdOfInstitucionCollectionInstitucion != null) {
         oldTipoIdOfInstitucionCollectionInstitucion
             .getInstitucionCollection()
             .remove(institucionCollectionInstitucion);
         oldTipoIdOfInstitucionCollectionInstitucion =
             em.merge(oldTipoIdOfInstitucionCollectionInstitucion);
       }
     }
     em.getTransaction().commit();
   } finally {
     if (em != null) {
       em.close();
     }
   }
 }
 public void edit(Tipo tipo) throws IllegalOrphanException, NonexistentEntityException, Exception {
   EntityManager em = null;
   try {
     em = getEntityManager();
     em.getTransaction().begin();
     Tipo persistentTipo = em.find(Tipo.class, tipo.getId());
     Collection<Institucion> institucionCollectionOld = persistentTipo.getInstitucionCollection();
     Collection<Institucion> institucionCollectionNew = tipo.getInstitucionCollection();
     List<String> illegalOrphanMessages = null;
     for (Institucion institucionCollectionOldInstitucion : institucionCollectionOld) {
       if (!institucionCollectionNew.contains(institucionCollectionOldInstitucion)) {
         if (illegalOrphanMessages == null) {
           illegalOrphanMessages = new ArrayList<String>();
         }
         illegalOrphanMessages.add(
             "You must retain Institucion "
                 + institucionCollectionOldInstitucion
                 + " since its tipoId field is not nullable.");
       }
     }
     if (illegalOrphanMessages != null) {
       throw new IllegalOrphanException(illegalOrphanMessages);
     }
     Collection<Institucion> attachedInstitucionCollectionNew = new ArrayList<Institucion>();
     for (Institucion institucionCollectionNewInstitucionToAttach : institucionCollectionNew) {
       institucionCollectionNewInstitucionToAttach =
           em.getReference(
               institucionCollectionNewInstitucionToAttach.getClass(),
               institucionCollectionNewInstitucionToAttach.getId());
       attachedInstitucionCollectionNew.add(institucionCollectionNewInstitucionToAttach);
     }
     institucionCollectionNew = attachedInstitucionCollectionNew;
     tipo.setInstitucionCollection(institucionCollectionNew);
     tipo = em.merge(tipo);
     for (Institucion institucionCollectionNewInstitucion : institucionCollectionNew) {
       if (!institucionCollectionOld.contains(institucionCollectionNewInstitucion)) {
         Tipo oldTipoIdOfInstitucionCollectionNewInstitucion =
             institucionCollectionNewInstitucion.getTipoId();
         institucionCollectionNewInstitucion.setTipoId(tipo);
         institucionCollectionNewInstitucion = em.merge(institucionCollectionNewInstitucion);
         if (oldTipoIdOfInstitucionCollectionNewInstitucion != null
             && !oldTipoIdOfInstitucionCollectionNewInstitucion.equals(tipo)) {
           oldTipoIdOfInstitucionCollectionNewInstitucion
               .getInstitucionCollection()
               .remove(institucionCollectionNewInstitucion);
           oldTipoIdOfInstitucionCollectionNewInstitucion =
               em.merge(oldTipoIdOfInstitucionCollectionNewInstitucion);
         }
       }
     }
     em.getTransaction().commit();
   } catch (Exception ex) {
     String msg = ex.getLocalizedMessage();
     if (msg == null || msg.length() == 0) {
       Integer id = tipo.getId();
       if (findTipo(id) == null) {
         throw new NonexistentEntityException("The tipo with id " + id + " no longer exists.");
       }
     }
     throw ex;
   } finally {
     if (em != null) {
       em.close();
     }
   }
 }