public void create(Funcao funcao) throws RollbackFailureException, Exception {
   if (funcao.getPessoaFisicaJuridicaCollection() == null) {
     funcao.setPessoaFisicaJuridicaCollection(new ArrayList<PessoaFisicaJuridica>());
   }
   if (funcao.getPessoaFisicaJuridicaHistoricoCollection() == null) {
     funcao.setPessoaFisicaJuridicaHistoricoCollection(
         new ArrayList<PessoaFisicaJuridicaHistorico>());
   }
   EntityManager em = null;
   try {
     em = getEntityManager();
     em.getTransaction().begin();
     Collection<PessoaFisicaJuridica> attachedPessoaFisicaJuridicaCollection =
         new ArrayList<PessoaFisicaJuridica>();
     for (PessoaFisicaJuridica pessoaFisicaJuridicaCollectionPessoaFisicaJuridicaToAttach :
         funcao.getPessoaFisicaJuridicaCollection()) {
       pessoaFisicaJuridicaCollectionPessoaFisicaJuridicaToAttach =
           em.getReference(
               pessoaFisicaJuridicaCollectionPessoaFisicaJuridicaToAttach.getClass(),
               pessoaFisicaJuridicaCollectionPessoaFisicaJuridicaToAttach.getId());
       attachedPessoaFisicaJuridicaCollection.add(
           pessoaFisicaJuridicaCollectionPessoaFisicaJuridicaToAttach);
     }
     funcao.setPessoaFisicaJuridicaCollection(attachedPessoaFisicaJuridicaCollection);
     Collection<PessoaFisicaJuridicaHistorico> attachedPessoaFisicaJuridicaHistoricoCollection =
         new ArrayList<PessoaFisicaJuridicaHistorico>();
     for (PessoaFisicaJuridicaHistorico
         pessoaFisicaJuridicaHistoricoCollectionPessoaFisicaJuridicaHistoricoToAttach :
             funcao.getPessoaFisicaJuridicaHistoricoCollection()) {
       pessoaFisicaJuridicaHistoricoCollectionPessoaFisicaJuridicaHistoricoToAttach =
           em.getReference(
               pessoaFisicaJuridicaHistoricoCollectionPessoaFisicaJuridicaHistoricoToAttach
                   .getClass(),
               pessoaFisicaJuridicaHistoricoCollectionPessoaFisicaJuridicaHistoricoToAttach
                   .getId());
       attachedPessoaFisicaJuridicaHistoricoCollection.add(
           pessoaFisicaJuridicaHistoricoCollectionPessoaFisicaJuridicaHistoricoToAttach);
     }
     funcao.setPessoaFisicaJuridicaHistoricoCollection(
         attachedPessoaFisicaJuridicaHistoricoCollection);
     em.persist(funcao);
     for (PessoaFisicaJuridica pessoaFisicaJuridicaCollectionPessoaFisicaJuridica :
         funcao.getPessoaFisicaJuridicaCollection()) {
       Funcao oldFuncaoFkOfPessoaFisicaJuridicaCollectionPessoaFisicaJuridica =
           pessoaFisicaJuridicaCollectionPessoaFisicaJuridica.getFuncaoFk();
       pessoaFisicaJuridicaCollectionPessoaFisicaJuridica.setFuncaoFk(funcao);
       pessoaFisicaJuridicaCollectionPessoaFisicaJuridica =
           em.merge(pessoaFisicaJuridicaCollectionPessoaFisicaJuridica);
       if (oldFuncaoFkOfPessoaFisicaJuridicaCollectionPessoaFisicaJuridica != null) {
         oldFuncaoFkOfPessoaFisicaJuridicaCollectionPessoaFisicaJuridica
             .getPessoaFisicaJuridicaCollection()
             .remove(pessoaFisicaJuridicaCollectionPessoaFisicaJuridica);
         oldFuncaoFkOfPessoaFisicaJuridicaCollectionPessoaFisicaJuridica =
             em.merge(oldFuncaoFkOfPessoaFisicaJuridicaCollectionPessoaFisicaJuridica);
       }
     }
     for (PessoaFisicaJuridicaHistorico
         pessoaFisicaJuridicaHistoricoCollectionPessoaFisicaJuridicaHistorico :
             funcao.getPessoaFisicaJuridicaHistoricoCollection()) {
       Funcao oldFuncaoFkOfPessoaFisicaJuridicaHistoricoCollectionPessoaFisicaJuridicaHistorico =
           pessoaFisicaJuridicaHistoricoCollectionPessoaFisicaJuridicaHistorico.getFuncaoFk();
       pessoaFisicaJuridicaHistoricoCollectionPessoaFisicaJuridicaHistorico.setFuncaoFk(funcao);
       pessoaFisicaJuridicaHistoricoCollectionPessoaFisicaJuridicaHistorico =
           em.merge(pessoaFisicaJuridicaHistoricoCollectionPessoaFisicaJuridicaHistorico);
       if (oldFuncaoFkOfPessoaFisicaJuridicaHistoricoCollectionPessoaFisicaJuridicaHistorico
           != null) {
         oldFuncaoFkOfPessoaFisicaJuridicaHistoricoCollectionPessoaFisicaJuridicaHistorico
             .getPessoaFisicaJuridicaHistoricoCollection()
             .remove(pessoaFisicaJuridicaHistoricoCollectionPessoaFisicaJuridicaHistorico);
         oldFuncaoFkOfPessoaFisicaJuridicaHistoricoCollectionPessoaFisicaJuridicaHistorico =
             em.merge(
                 oldFuncaoFkOfPessoaFisicaJuridicaHistoricoCollectionPessoaFisicaJuridicaHistorico);
       }
     }
     em.getTransaction().commit();
   } catch (Exception ex) {
     try {
       em.getTransaction().rollback();
     } catch (Exception re) {
       throw new RollbackFailureException(
           "An error occurred attempting to roll back the transaction.", re);
     }
     throw ex;
   } finally {
     if (em != null) {
       em.close();
     }
   }
 }
 public void edit(Funcao funcao)
     throws NonexistentEntityException, RollbackFailureException, Exception {
   EntityManager em = null;
   try {
     em = getEntityManager();
     em.getTransaction().begin();
     Funcao persistentFuncao = em.find(Funcao.class, funcao.getId());
     Collection<PessoaFisicaJuridica> pessoaFisicaJuridicaCollectionOld =
         persistentFuncao.getPessoaFisicaJuridicaCollection();
     Collection<PessoaFisicaJuridica> pessoaFisicaJuridicaCollectionNew =
         funcao.getPessoaFisicaJuridicaCollection();
     Collection<PessoaFisicaJuridicaHistorico> pessoaFisicaJuridicaHistoricoCollectionOld =
         persistentFuncao.getPessoaFisicaJuridicaHistoricoCollection();
     Collection<PessoaFisicaJuridicaHistorico> pessoaFisicaJuridicaHistoricoCollectionNew =
         funcao.getPessoaFisicaJuridicaHistoricoCollection();
     Collection<PessoaFisicaJuridica> attachedPessoaFisicaJuridicaCollectionNew =
         new ArrayList<PessoaFisicaJuridica>();
     for (PessoaFisicaJuridica pessoaFisicaJuridicaCollectionNewPessoaFisicaJuridicaToAttach :
         pessoaFisicaJuridicaCollectionNew) {
       pessoaFisicaJuridicaCollectionNewPessoaFisicaJuridicaToAttach =
           em.getReference(
               pessoaFisicaJuridicaCollectionNewPessoaFisicaJuridicaToAttach.getClass(),
               pessoaFisicaJuridicaCollectionNewPessoaFisicaJuridicaToAttach.getId());
       attachedPessoaFisicaJuridicaCollectionNew.add(
           pessoaFisicaJuridicaCollectionNewPessoaFisicaJuridicaToAttach);
     }
     pessoaFisicaJuridicaCollectionNew = attachedPessoaFisicaJuridicaCollectionNew;
     funcao.setPessoaFisicaJuridicaCollection(pessoaFisicaJuridicaCollectionNew);
     Collection<PessoaFisicaJuridicaHistorico> attachedPessoaFisicaJuridicaHistoricoCollectionNew =
         new ArrayList<PessoaFisicaJuridicaHistorico>();
     for (PessoaFisicaJuridicaHistorico
         pessoaFisicaJuridicaHistoricoCollectionNewPessoaFisicaJuridicaHistoricoToAttach :
             pessoaFisicaJuridicaHistoricoCollectionNew) {
       pessoaFisicaJuridicaHistoricoCollectionNewPessoaFisicaJuridicaHistoricoToAttach =
           em.getReference(
               pessoaFisicaJuridicaHistoricoCollectionNewPessoaFisicaJuridicaHistoricoToAttach
                   .getClass(),
               pessoaFisicaJuridicaHistoricoCollectionNewPessoaFisicaJuridicaHistoricoToAttach
                   .getId());
       attachedPessoaFisicaJuridicaHistoricoCollectionNew.add(
           pessoaFisicaJuridicaHistoricoCollectionNewPessoaFisicaJuridicaHistoricoToAttach);
     }
     pessoaFisicaJuridicaHistoricoCollectionNew =
         attachedPessoaFisicaJuridicaHistoricoCollectionNew;
     funcao.setPessoaFisicaJuridicaHistoricoCollection(pessoaFisicaJuridicaHistoricoCollectionNew);
     funcao = em.merge(funcao);
     for (PessoaFisicaJuridica pessoaFisicaJuridicaCollectionOldPessoaFisicaJuridica :
         pessoaFisicaJuridicaCollectionOld) {
       if (!pessoaFisicaJuridicaCollectionNew.contains(
           pessoaFisicaJuridicaCollectionOldPessoaFisicaJuridica)) {
         pessoaFisicaJuridicaCollectionOldPessoaFisicaJuridica.setFuncaoFk(null);
         pessoaFisicaJuridicaCollectionOldPessoaFisicaJuridica =
             em.merge(pessoaFisicaJuridicaCollectionOldPessoaFisicaJuridica);
       }
     }
     for (PessoaFisicaJuridica pessoaFisicaJuridicaCollectionNewPessoaFisicaJuridica :
         pessoaFisicaJuridicaCollectionNew) {
       if (!pessoaFisicaJuridicaCollectionOld.contains(
           pessoaFisicaJuridicaCollectionNewPessoaFisicaJuridica)) {
         Funcao oldFuncaoFkOfPessoaFisicaJuridicaCollectionNewPessoaFisicaJuridica =
             pessoaFisicaJuridicaCollectionNewPessoaFisicaJuridica.getFuncaoFk();
         pessoaFisicaJuridicaCollectionNewPessoaFisicaJuridica.setFuncaoFk(funcao);
         pessoaFisicaJuridicaCollectionNewPessoaFisicaJuridica =
             em.merge(pessoaFisicaJuridicaCollectionNewPessoaFisicaJuridica);
         if (oldFuncaoFkOfPessoaFisicaJuridicaCollectionNewPessoaFisicaJuridica != null
             && !oldFuncaoFkOfPessoaFisicaJuridicaCollectionNewPessoaFisicaJuridica.equals(
                 funcao)) {
           oldFuncaoFkOfPessoaFisicaJuridicaCollectionNewPessoaFisicaJuridica
               .getPessoaFisicaJuridicaCollection()
               .remove(pessoaFisicaJuridicaCollectionNewPessoaFisicaJuridica);
           oldFuncaoFkOfPessoaFisicaJuridicaCollectionNewPessoaFisicaJuridica =
               em.merge(oldFuncaoFkOfPessoaFisicaJuridicaCollectionNewPessoaFisicaJuridica);
         }
       }
     }
     for (PessoaFisicaJuridicaHistorico
         pessoaFisicaJuridicaHistoricoCollectionOldPessoaFisicaJuridicaHistorico :
             pessoaFisicaJuridicaHistoricoCollectionOld) {
       if (!pessoaFisicaJuridicaHistoricoCollectionNew.contains(
           pessoaFisicaJuridicaHistoricoCollectionOldPessoaFisicaJuridicaHistorico)) {
         pessoaFisicaJuridicaHistoricoCollectionOldPessoaFisicaJuridicaHistorico.setFuncaoFk(null);
         pessoaFisicaJuridicaHistoricoCollectionOldPessoaFisicaJuridicaHistorico =
             em.merge(pessoaFisicaJuridicaHistoricoCollectionOldPessoaFisicaJuridicaHistorico);
       }
     }
     for (PessoaFisicaJuridicaHistorico
         pessoaFisicaJuridicaHistoricoCollectionNewPessoaFisicaJuridicaHistorico :
             pessoaFisicaJuridicaHistoricoCollectionNew) {
       if (!pessoaFisicaJuridicaHistoricoCollectionOld.contains(
           pessoaFisicaJuridicaHistoricoCollectionNewPessoaFisicaJuridicaHistorico)) {
         Funcao
             oldFuncaoFkOfPessoaFisicaJuridicaHistoricoCollectionNewPessoaFisicaJuridicaHistorico =
                 pessoaFisicaJuridicaHistoricoCollectionNewPessoaFisicaJuridicaHistorico
                     .getFuncaoFk();
         pessoaFisicaJuridicaHistoricoCollectionNewPessoaFisicaJuridicaHistorico.setFuncaoFk(
             funcao);
         pessoaFisicaJuridicaHistoricoCollectionNewPessoaFisicaJuridicaHistorico =
             em.merge(pessoaFisicaJuridicaHistoricoCollectionNewPessoaFisicaJuridicaHistorico);
         if (oldFuncaoFkOfPessoaFisicaJuridicaHistoricoCollectionNewPessoaFisicaJuridicaHistorico
                 != null
             && !oldFuncaoFkOfPessoaFisicaJuridicaHistoricoCollectionNewPessoaFisicaJuridicaHistorico
                 .equals(funcao)) {
           oldFuncaoFkOfPessoaFisicaJuridicaHistoricoCollectionNewPessoaFisicaJuridicaHistorico
               .getPessoaFisicaJuridicaHistoricoCollection()
               .remove(pessoaFisicaJuridicaHistoricoCollectionNewPessoaFisicaJuridicaHistorico);
           oldFuncaoFkOfPessoaFisicaJuridicaHistoricoCollectionNewPessoaFisicaJuridicaHistorico =
               em.merge(
                   oldFuncaoFkOfPessoaFisicaJuridicaHistoricoCollectionNewPessoaFisicaJuridicaHistorico);
         }
       }
     }
     em.getTransaction().commit();
   } catch (Exception ex) {
     try {
       em.getTransaction().rollback();
     } catch (Exception re) {
       throw new RollbackFailureException(
           "An error occurred attempting to roll back the transaction.", re);
     }
     String msg = ex.getLocalizedMessage();
     if (msg == null || msg.length() == 0) {
       Integer id = funcao.getId();
       if (findFuncao(id) == null) {
         throw new NonexistentEntityException("The funcao with id " + id + " no longer exists.");
       }
     }
     throw ex;
   } finally {
     if (em != null) {
       em.close();
     }
   }
 }