@Override
 public UsuarioApiario eliminarUsuarioApiario(UsuarioApiario instance) throws Exception {
   if (!(instance != null && instance.getListaEliminar().size() > 0)) {
     instance.setSuccess(false);
     return instance;
   }
   List<Integer> listaIds = instance.getListaEliminar();
   instance.setSuccess(false);
   try {
     Open();
     em.getTransaction().begin();
     for (int i = 0; i < listaIds.size(); i++) {
       String hql = "delete from UsuarioApiario p where p.idUsuarioApiario in (:v_ids)";
       em.createQuery(hql).setParameter("v_ids", listaIds.get(i)).executeUpdate();
     }
     em.getTransaction().commit();
     instance.setSuccess(true);
   } catch (RuntimeException re) {
     instance.setSuccess(false);
     em.getTransaction().rollback();
     instance.setMsgResult("No se puede eliminar por estar relacionado con otra(s) Tablas");
     re.printStackTrace();
   } finally {
     Close();
   }
   return instance;
 }
 @Override
 public UsuarioApiario guardarUsuarioApiario(UsuarioApiario instance) throws Exception {
   try {
     instance.setSuccess(false);
     Open();
     em.getTransaction().begin();
     em.merge(instance);
     em.getTransaction().commit();
     instance.setSuccess(true);
     return instance;
   } catch (RuntimeException re) {
     instance.setSuccess(false);
     instance.setMsgResult("Error al grabar el parametro.");
     System.out.println("DAO " + re.getMessage());
     em.getTransaction().rollback();
     throw re;
   } finally {
     Close();
   }
 }
  @Override
  public List<UsuarioApiario> buscarUsuarioApiario(UsuarioApiario instance) throws Exception {
    Open();
    CriteriaBuilder builder = emf.getCriteriaBuilder();
    CriteriaQuery<UsuarioApiario> criteria = builder.createQuery(UsuarioApiario.class);
    Root<UsuarioApiario> UsuarioApiarioRoot = criteria.from(UsuarioApiario.class);
    Join<UsuarioApiario, Apiario> apiarioRoot = UsuarioApiarioRoot.join("apiario");
    Join<UsuarioApiario, Usuario> usuarioRoot = UsuarioApiarioRoot.join("usuario");
    Join<UsuarioApiario, Temporada> temporadaRoot = UsuarioApiarioRoot.join("temporada");

    criteria.select(UsuarioApiarioRoot);
    List<Predicate> p = new ArrayList<Predicate>();

    if (instance != null) {
      System.out.println("usuarioApiario");
      if (instance.getIdUsuarioApiario() != null && instance.getIdUsuarioApiario().intValue() > 0) {
        System.out.println("usuarioApiario.idUsuarioApiario");
        Predicate condition =
            builder.equal(
                UsuarioApiarioRoot.get("idUsuarioApiario"), instance.getIdUsuarioApiario());
        p.add(condition);
      }
      if (instance.getApiario() != null) {
        if (instance.getApiario().getIdApiario() != null
            && instance.getApiario().getIdApiario().intValue() > 0) {
          System.out.println("apiario.idApiario");
          Predicate condition =
              builder.equal(apiarioRoot.get("idApiario"), instance.getApiario().getIdApiario());
          p.add(condition);
        }
      }
      if (instance.getUsuario() != null) {
        if (instance.getUsuario().getIdUsuario() != null
            && instance.getUsuario().getIdUsuario().intValue() > 0) {
          System.out.println("usuario.idUsuario");
          Predicate condition =
              builder.equal(usuarioRoot.get("idUsuario"), instance.getUsuario().getIdUsuario());
          p.add(condition);
        }
      }
      if (instance.getTemporada() != null) {
        if (instance.getTemporada().getIdTemporada() != null
            && instance.getTemporada().getIdTemporada().intValue() > 0) {
          System.out.println("temporada.idTemporada");
          Predicate condition =
              builder.equal(
                  temporadaRoot.get("idTemporada"), instance.getTemporada().getIdTemporada());
          p.add(condition);
        }
        if (instance.getTemporada().getEstadoTemporada() != null) {
          Predicate condition =
              builder.equal(
                  temporadaRoot.get("estadoTemporada"),
                  instance.getTemporada().getEstadoTemporada());
          p.add(condition);
        }
        if (instance.getTemporada().getEtapaTemporada() != null
            && instance.getTemporada().getEtapaTemporada().length() > 0) {
          Predicate condition =
              builder.like(
                  temporadaRoot.<String>get("etapaTemporada"),
                  "%" + instance.getTemporada().getEtapaTemporada() + "%");
          p.add(condition);
        }
      }
    }
    Predicate[] predicates = new Predicate[p.size()];
    p.toArray(predicates);
    criteria.where(predicates);

    List<UsuarioApiario> lista = em.createQuery(criteria).getResultList();
    em.close();
    return lista;
  }