Ir para conteúdo
Fórum Script Brasil
  • 0

result_count hibernate/postgres/javaEE


guimas_244

Pergunta

Estou desenvolvendo um sistema que já está paginado (limit e offset) mas quando determino um limit ele gera um conflito no result_count (no caso é o total de resultados)

Estou utilizando hibernate e criteria, postgres, java ee, tenho uma classe Dao que trata toda conexão com o banco postgres.

Em anexo as classes CondutorDao e o CondutorRest:

public class CondutorDao {

	private final EntityManager entityManager;

	public CondutorDao() {
		entityManager = JPAUtil.getEntityManagerFactory().createEntityManager();
	}

public List<Condutor> Consultar(String sql, int limit, int offset) {

        try {

            this.entityManager.getTransaction().begin();

            TypedQuery<Condutor> query = this.entityManager.createQuery(sql, Condutor.class).setFirstResult(offset)
                    .setMaxResults(limit);

            if (query.getResultList().size() > 0) {

                return query.getResultList();
            } else {
                return null;
            }

        } catch (Exception ex) {
            return null;
        }
    }

    public Long Count(String sql) {
        try {

            CriteriaBuilder qb = entityManager.getCriteriaBuilder();
            CriteriaQuery<Long> cq = qb.createQuery(Long.class);
            cq.select(qb.count(cq.from(Condutor.class)));
            cq.where(/*your stuff*/);
            return entityManager.createQuery(cq).getSingleResult();
          
          		} catch (Exception ex) {
			return null;
		}
	}
}

@Path("/condutor")
public class CondutorRest extends ResourceConfig {
	public CondutorRest() {
		register(ResponseCorsFilter.class);
	}
  	private final CondutorDao repository = new CondutorDao();
  
  	@GET
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/listaCondutor")
	public Response getTitular(@QueryParam("limit") int limit, @QueryParam("offset") int offset) {
		List<Condutor> condutor = repository.Consultar("SELECT p FROM Condutor p", limit, offset);
//limit e offset que é utilizado para paginar limita o count que é pra mostrar o total de resultados que existe no banco
		if (condutor != null) {
			Result resultado = new Result();
			repository.Count("SELECT (*) FROM Condutor c");

			resultado.type = "success";
			resultado.status = 200;
			resultado.limit = limit;
			resultado.offset = offset;
			resultado.result_count = condutor.size();
			resultado.results = condutor;
			return Response.status(200).entity(resultado).build();

		} else {
			ResultError error = new ResultError();
			error.error_message = "Not Found";
			error.type = "Not Found";
			Result resultado = new Result();
			resultado.type = "error";
			resultado.status = 404;
			resultado.results = error;
			return Response.status(404).entity(resultado).build();
		}
	}
}

 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...