Consulta "genérica" para realizar filtros (JPA)

0 respostas
d34d_d3v1l

Galera,

alguém já criou alguma consulta genérica para realizar filtros?
Vi um exemplo e estou utilizando, mas não estou gostando muito… pois só filtra Strings até o momento.

Alguém ja tem alguma coisa mais concreta implementada?

Quemn quiser ajudar a aprimorar, eis o código do que tenho:

// Criteria
	CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
	CriteriaQuery<T> accountQuery = criteriaBuilder.createQuery(entityClass);

	// From
	Root<T> from = accountQuery.from(entityClass);

	// sortField veio do construtor deste método... Nada de mais.
	if (sortField != null) {
	    if (sortOrder == SortOrder.ASCENDING) {
		accountQuery.orderBy(criteriaBuilder.asc(from.get(sortField)));
	    } else {
		accountQuery.orderBy(criteriaBuilder.desc(from.get(sortField)));
	    }
	}

	// filters
	List<Predicate> predicates = new ArrayList<Predicate>();

        //Ja deu pra perceber, recebo um Map com: key = campo value = valor_a_pesquisar.
	for (Entry<String, String> entry : filters.entrySet()) {
            // pesquisa String.. seria legal se tivesse como fazer isto funcionar para INT, ENUM e até outras entidades (relacionamentos)....
	    Expression<String> literal = criteriaBuilder.literal( "%"+entry.getValue()+"%");
	    predicates.add(criteriaBuilder.like(from.<String> get(entry.getKey()), literal));
	}
	accountQuery.where(predicates.toArray(new Predicate[predicates.size()]));

	// paginate
	data = entityManager.createQuery(accountQuery).setFirstResult(first).setMaxResults(getPageSize()).getResultList();

Bom, se fosse pra fazer criando na unha o SQL dava até pra fazer… como n tenho mto conhecimento em JPA … tb n sei se da pra fazer.
Lembrando que a parada é genérica… talvez precisamos usar reflection e tal…

valeuuu

Criado 13 de novembro de 2012
Respostas 0
Participantes 1