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.