Estou seguindo um curso e tomei um erro…
java.lang.IllegalStateException: No explicit selection and an implicit one could not be determined
Esse erro acontece na linha:
return new PageImpl<>(query.getResultList(), pageable, total(lancamentoFilter));
> public class LancamentoRepositoryImpl implements LancamentoResositoryQuery {
>
> @PersistenceContext
> private EntityManager manager;
>
> @Override
> public Page<Lancamento> filtrar(LancamentoFilter lancamentoFilter , Pageable pageable) {
> CriteriaBuilder builder = manager.getCriteriaBuilder();
> CriteriaQuery<Lancamento> criteria = builder.createQuery(Lancamento.class);
> Root<Lancamento> root = criteria.from(Lancamento.class);
>
> Predicate[] predicates = criarRestricoes(lancamentoFilter, builder, root);
> criteria.where(predicates);
> criteria.select(root);
>
> TypedQuery<Lancamento> query = manager.createQuery(criteria);
> adicionarPaginacao(query, pageable);
> return new PageImpl<>(query.getResultList(), pageable, total(lancamentoFilter));
> }
>
> private Predicate[] criarRestricoes(LancamentoFilter lancamentoFilter, CriteriaBuilder builder,
> Root<Lancamento> root) {
>
> List<Predicate> predicates = new ArrayList<Predicate>();
>
> if (!StringUtils.isEmpty(lancamentoFilter.getDescricao())) {
> predicates.add(builder.like(
> // META MODEL DEPENDENCIA NO POM jpamodelgen CRIA CLASSES PARA QUE ESCREVA
> // Lancamento_.DESCRICAO no lugar de "descricao" para evitar erros
> builder.lower(root.get(Lancamento_.DESCRICAO)),
> "%" + lancamentoFilter.getDescricao().toLowerCase() + "%"));
> }
>
> if (lancamentoFilter.getDataVencimentoDe() != null) {
> predicates.add(builder.greaterThanOrEqualTo(root.get(Lancamento_.DATA_VENCIMENTO),
> lancamentoFilter.getDataVencimentoDe()));
> }
>
> if (lancamentoFilter.getDataVencimentoAte() != null) {
> predicates.add(builder.lessThanOrEqualTo(root.get(Lancamento_.DATA_VENCIMENTO),
> lancamentoFilter.getDataVencimentoAte()));
> }
>
> return predicates.toArray(new Predicate[predicates.size()]);
> }
>
> private void adicionarPaginacao(TypedQuery<Lancamento> query, Pageable pageable) {
> int paginaAtual = pageable.getPageNumber();
> int totalRegistrosPorPagina = pageable.getPageSize();
> int primeiroRegistroDaPagina = paginaAtual * totalRegistrosPorPagina;
>
> query.setFirstResult(primeiroRegistroDaPagina);
> query.setMaxResults(totalRegistrosPorPagina);
>
>
> }
>
>
> private Long total(LancamentoFilter lancamentoFilter) {
> CriteriaBuilder builder = manager.getCriteriaBuilder();
> CriteriaQuery<Long> criteria = builder.createQuery(Long.class);
> Root<Lancamento> root = criteria.from(Lancamento.class);
>
> Predicate[] predicates = criarRestricoes(lancamentoFilter, builder, root);
> criteria.where(predicates);
>
> return manager.createQuery(criteria).getSingleResult();
> }
>
>
> }
Alguem conseguiria me ajudar?