protected final <T> ParameterExpression<T> createParameterExpression( Class<T> paramClass, String name) { final EntityManager entityManager = this.getEntityManager(); final EntityManagerFactory entityManagerFactory = entityManager.getEntityManagerFactory(); final CriteriaBuilder criteriaBuilder = entityManagerFactory.getCriteriaBuilder(); return criteriaBuilder.parameter(paramClass, name); }
/** * Factory method for creating a {@link CriteriaQuery} employing standards and best practices in * general use within the portal. Query objects returned from this method should normally be * passed to {@link createCachedQuery}; this step is important for the sake of scalability. */ protected final <T> CriteriaQuery<T> createCriteriaQuery( Function<CriteriaBuilder, CriteriaQuery<T>> builder) { final EntityManager entityManager = this.getEntityManager(); final EntityManagerFactory entityManagerFactory = entityManager.getEntityManagerFactory(); final CriteriaBuilder criteriaBuilder = entityManagerFactory.getCriteriaBuilder(); final CriteriaQuery<T> criteriaQuery = builder.apply(criteriaBuilder); // Do in TX so the EM gets closed correctly final TransactionOperations transactionOperations = this.getTransactionOperations(); transactionOperations.execute( new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus status) { entityManager.createQuery( criteriaQuery); // pre-compile critera query to avoid race conditions when setting // aliases } }); return criteriaQuery; }
@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; }