public void edit(Usuario usuario) throws NonexistentEntityException, Exception {
   EntityManager em = null;
   try {
     em = getEntityManager();
     em.getTransaction().begin();
     Usuario persistentUsuario = em.find(Usuario.class, usuario.getIdUsuario());
     Collection<Detalle> detalleCollectionOld = persistentUsuario.getDetalleCollection();
     Collection<Detalle> detalleCollectionNew = usuario.getDetalleCollection();
     Collection<Detalle> attachedDetalleCollectionNew = new ArrayList<Detalle>();
     for (Detalle detalleCollectionNewDetalleToAttach : detalleCollectionNew) {
       detalleCollectionNewDetalleToAttach =
           em.getReference(
               detalleCollectionNewDetalleToAttach.getClass(),
               detalleCollectionNewDetalleToAttach.getIdDetalle());
       attachedDetalleCollectionNew.add(detalleCollectionNewDetalleToAttach);
     }
     detalleCollectionNew = attachedDetalleCollectionNew;
     usuario.setDetalleCollection(detalleCollectionNew);
     usuario = em.merge(usuario);
     for (Detalle detalleCollectionOldDetalle : detalleCollectionOld) {
       if (!detalleCollectionNew.contains(detalleCollectionOldDetalle)) {
         detalleCollectionOldDetalle.setIdUsuario(null);
         detalleCollectionOldDetalle = em.merge(detalleCollectionOldDetalle);
       }
     }
     for (Detalle detalleCollectionNewDetalle : detalleCollectionNew) {
       if (!detalleCollectionOld.contains(detalleCollectionNewDetalle)) {
         Usuario oldIdUsuarioOfDetalleCollectionNewDetalle =
             detalleCollectionNewDetalle.getIdUsuario();
         detalleCollectionNewDetalle.setIdUsuario(usuario);
         detalleCollectionNewDetalle = em.merge(detalleCollectionNewDetalle);
         if (oldIdUsuarioOfDetalleCollectionNewDetalle != null
             && !oldIdUsuarioOfDetalleCollectionNewDetalle.equals(usuario)) {
           oldIdUsuarioOfDetalleCollectionNewDetalle
               .getDetalleCollection()
               .remove(detalleCollectionNewDetalle);
           oldIdUsuarioOfDetalleCollectionNewDetalle =
               em.merge(oldIdUsuarioOfDetalleCollectionNewDetalle);
         }
       }
     }
     em.getTransaction().commit();
   } catch (Exception ex) {
     String msg = ex.getLocalizedMessage();
     if (msg == null || msg.length() == 0) {
       Integer id = usuario.getIdUsuario();
       if (findUsuario(id) == null) {
         throw new NonexistentEntityException("The usuario with id " + id + " no longer exists.");
       }
     }
     throw ex;
   } finally {
     if (em != null) {
       em.close();
     }
   }
 }
 public void create(Usuario usuario) {
   if (usuario.getDetalleCollection() == null) {
     usuario.setDetalleCollection(new ArrayList<Detalle>());
   }
   EntityManager em = null;
   try {
     em = getEntityManager();
     em.getTransaction().begin();
     Collection<Detalle> attachedDetalleCollection = new ArrayList<Detalle>();
     for (Detalle detalleCollectionDetalleToAttach : usuario.getDetalleCollection()) {
       detalleCollectionDetalleToAttach =
           em.getReference(
               detalleCollectionDetalleToAttach.getClass(),
               detalleCollectionDetalleToAttach.getIdDetalle());
       attachedDetalleCollection.add(detalleCollectionDetalleToAttach);
     }
     usuario.setDetalleCollection(attachedDetalleCollection);
     em.persist(usuario);
     for (Detalle detalleCollectionDetalle : usuario.getDetalleCollection()) {
       Usuario oldIdUsuarioOfDetalleCollectionDetalle = detalleCollectionDetalle.getIdUsuario();
       detalleCollectionDetalle.setIdUsuario(usuario);
       detalleCollectionDetalle = em.merge(detalleCollectionDetalle);
       if (oldIdUsuarioOfDetalleCollectionDetalle != null) {
         oldIdUsuarioOfDetalleCollectionDetalle
             .getDetalleCollection()
             .remove(detalleCollectionDetalle);
         oldIdUsuarioOfDetalleCollectionDetalle = em.merge(oldIdUsuarioOfDetalleCollectionDetalle);
       }
     }
     em.getTransaction().commit();
   } finally {
     if (em != null) {
       em.close();
     }
   }
 }