public Usuario authenticate(String usuarioId, String password) {
    EntityManager em = getEntityManager();
    try {
      Usuario userAuthenticated = null;
      Query q =
          em.createQuery(
              "SELECT u FROM Usuario u WHERE u.usuarioId = :usuarioId and u.password = :password");
      q.setParameter("usuarioId", usuarioId);
      q.setParameter("password", ApplicationLogic.getMD5Encrypted(password));
      userAuthenticated = (Usuario) q.getSingleResult();
      Sucursal sucursal = userAuthenticated.getSucursal();
      Collection<Almacen> almacenCollection = null;
      if (sucursal != null) {
        almacenCollection = sucursal.getAlmacenCollection();
      }
      Collection<Perfil> perfilCollection = userAuthenticated.getPerfilCollection();

      for (Perfil perfil : perfilCollection) {
        perfil.getUsuarioCollection();
        perfil.setUsuarioCollection(null);
      }

      userAuthenticated.setPedidoVentaCollection(null);
      userAuthenticated.setMovimientoHistoricoProductoCollection(null);
      // userAuthenticated.setEstadoDeCuentaCollection(null);
      userAuthenticated.setPedidoVentaEstadoCollection(null);
      userAuthenticated.setMensajesParaPortalCollection(null);

      return userAuthenticated;
    } catch (NoResultException nre) {
      return null;
    } finally {
      em.close();
    }
  }
  public Usuario findUsuario(String id) {
    EntityManager em = getEntityManager();
    try {
      Usuario x = em.find(Usuario.class, id);

      Collection<Perfil> perfilCollection = x.getPerfilCollection();
      for (Perfil perfil : perfilCollection) {}

      return x;
    } finally {
      em.close();
    }
  }
  private List<Usuario> findUsuarioEntities(boolean all, int maxResults, int firstResult) {
    EntityManager em = getEntityManager();
    try {
      Query q = em.createQuery("select u from Usuario u");
      // Query q = em.createQuery("select u from Usuario u inner join u.perfilCollection");
      if (!all) {
        q.setMaxResults(maxResults);
        q.setFirstResult(firstResult);
      }
      List<Usuario> resultLsit = q.getResultList();
      for (Usuario x : resultLsit) {
        Collection<Perfil> perfilCollection = x.getPerfilCollection();
        //                Collection<PedidoVenta> pedidoVentaCollection =
        // x.getPedidoVentaCollection();
        //                Collection<MovimientoHistoricoProducto>
        // movimientoHistoricoProductoCollection = x.getMovimientoHistoricoProductoCollection();
        //                Collection<EstadoDeCuenta> estadoDeCuentaCollection =
        // x.getEstadoDeCuentaCollection();
        //                Collection<PedidoCompraEstado> pedidoCompraEstadoCollection =
        // x.getPedidoCompraEstadoCollection();
        //                Collection<PedidoCompra> pedidoCompraCollection =
        // x.getPedidoCompraCollection();
        //                Collection<PedidoVentaEstado> pedidoVentaEstadoCollection =
        // x.getPedidoVentaEstadoCollection();
        //
        // System.err.println("\t=>> 1. For Usuario:"+x);
        for (Perfil perfil : perfilCollection) {
          // System.err.println("\t\t=>> 1. fecthing Perfil:"+perfil);
          perfil.getUsuarioCollection();
          perfil.setUsuarioCollection(null);
        }

        x.setPerfilCollection(perfilCollection);
        x.setPedidoVentaCollection(null);
        x.setMovimientoHistoricoProductoCollection(null);
        // x.setEstadoDeCuentaCollection(null);
        x.setPedidoVentaEstadoCollection(null);
        x.setMensajesParaPortalCollection(null);
      }
      return resultLsit;
    } finally {
      em.close();
    }
  }