Criteria, paginação, rowCount

1 resposta
Lagaffe

Pessoal,

Eu tenho dois criteria parecidos, um para paginação e o outro para contar o numero total de linhas.

Quando eu incluo uma restrição com um objeto list o meu criteria com rowCount apresenta um erro. O outro, de paginação, traz os dados corretamente.

Criteria que calcula o numero total de linhas:

Criteria criteriaTamanho = getSession().createCriteria(Peca.class)
                                       .createAlias("pecaSinonimos", "ps", Criteria.LEFT_JOIN)
//                                       .setProjection( Projections.projectionList()
//                                            .add( Projections.groupProperty("id")))
		                                .add(Restrictions.eq("empresa", empresa));
		if (!peca.getCodigo().isEmpty()) {
			criteriaTamanho.add( Restrictions.or(
					Restrictions.eq("codigo", peca.getCodigo() ),
					Restrictions.eq("ps.codigo", peca.getCodigo())
			    ) );
		}
		if (!peca.getNome().isEmpty()) {
			criteriaTamanho.add(Restrictions.ilike("nome", peca.getNome(), MatchMode.ANYWHERE));
		}
		return (Integer) criteriaTamanho.setProjection(Projections.rowCount()).uniqueResult();

O erro:

org.postgresql.util.PSQLException: ERROR: column "ps1_.id" must appear in the GROUP BY clause or be used in an aggregate function
  Position : 134

O objeto pecaSinonimos é um List.

Não consigo entender porque ele pede um group by. No meu ponto de vista não deveria.

Alguem pode me ajudar?

Obrigado.

1 Resposta

Lagaffe

Alterei a última linha por:

e funcionou.

Porém não me parece uma boa solução. Alguma sugestão?

Obrigado.

Criado 13 de novembro de 2010
Ultima resposta 13 de dez. de 2010
Respostas 1
Participantes 1