public void create(User user) throws RollbackFailureException, Exception {
   if (user.getTokenCollection() == null) {
     user.setTokenCollection(new ArrayList<Token>());
   }
   EntityManager em = null;
   try {
     utx.begin();
     em = getEntityManager();
     Collection<Token> attachedTokenCollection = new ArrayList<Token>();
     for (Token tokenCollectionTokenToAttach : user.getTokenCollection()) {
       tokenCollectionTokenToAttach =
           em.getReference(
               tokenCollectionTokenToAttach.getClass(), tokenCollectionTokenToAttach.getVal());
       attachedTokenCollection.add(tokenCollectionTokenToAttach);
     }
     user.setTokenCollection(attachedTokenCollection);
     em.persist(user);
     for (Token tokenCollectionToken : user.getTokenCollection()) {
       User oldUidOfTokenCollectionToken = tokenCollectionToken.getUid();
       tokenCollectionToken.setUid(user);
       tokenCollectionToken = em.merge(tokenCollectionToken);
       if (oldUidOfTokenCollectionToken != null) {
         oldUidOfTokenCollectionToken.getTokenCollection().remove(tokenCollectionToken);
         oldUidOfTokenCollectionToken = em.merge(oldUidOfTokenCollectionToken);
       }
     }
     utx.commit();
   } catch (Exception ex) {
     try {
       utx.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(User user)
     throws IllegalOrphanException, NonexistentEntityException, RollbackFailureException,
         Exception {
   EntityManager em = null;
   try {
     utx.begin();
     em = getEntityManager();
     User persistentUser = em.find(User.class, user.getId());
     Collection<Token> tokenCollectionOld = persistentUser.getTokenCollection();
     Collection<Token> tokenCollectionNew = user.getTokenCollection();
     List<String> illegalOrphanMessages = null;
     for (Token tokenCollectionOldToken : tokenCollectionOld) {
       if (!tokenCollectionNew.contains(tokenCollectionOldToken)) {
         if (illegalOrphanMessages == null) {
           illegalOrphanMessages = new ArrayList<String>();
         }
         illegalOrphanMessages.add(
             "You must retain Token "
                 + tokenCollectionOldToken
                 + " since its uid field is not nullable.");
       }
     }
     if (illegalOrphanMessages != null) {
       throw new IllegalOrphanException(illegalOrphanMessages);
     }
     Collection<Token> attachedTokenCollectionNew = new ArrayList<Token>();
     for (Token tokenCollectionNewTokenToAttach : tokenCollectionNew) {
       tokenCollectionNewTokenToAttach =
           em.getReference(
               tokenCollectionNewTokenToAttach.getClass(),
               tokenCollectionNewTokenToAttach.getVal());
       attachedTokenCollectionNew.add(tokenCollectionNewTokenToAttach);
     }
     tokenCollectionNew = attachedTokenCollectionNew;
     user.setTokenCollection(tokenCollectionNew);
     user = em.merge(user);
     for (Token tokenCollectionNewToken : tokenCollectionNew) {
       if (!tokenCollectionOld.contains(tokenCollectionNewToken)) {
         User oldUidOfTokenCollectionNewToken = tokenCollectionNewToken.getUid();
         tokenCollectionNewToken.setUid(user);
         tokenCollectionNewToken = em.merge(tokenCollectionNewToken);
         if (oldUidOfTokenCollectionNewToken != null
             && !oldUidOfTokenCollectionNewToken.equals(user)) {
           oldUidOfTokenCollectionNewToken.getTokenCollection().remove(tokenCollectionNewToken);
           oldUidOfTokenCollectionNewToken = em.merge(oldUidOfTokenCollectionNewToken);
         }
       }
     }
     utx.commit();
   } catch (Exception ex) {
     try {
       utx.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 = user.getId();
       if (findUser(id) == null) {
         throw new NonexistentEntityException("The user with id " + id + " no longer exists.");
       }
     }
     throw ex;
   } finally {
     if (em != null) {
       em.close();
     }
   }
 }