Cast na consulta HQL

Tenho esta consulta, mas a ordenação não está correta, pois está como String.

StringBuilder hql = new StringBuilder("SELECT DISTINCT new IdentificacaoEntity(SUBSTRING(i.mesAnoInicio, 1, 4)) FROM IdentificacaoEntity i ");
hql.append("\n WHERE (i.status = :processadaAssinada ");
hql.append("\n OR i.status = :pago) ");
hql.append("\n AND i.declaracao = :declaracao ");
hql.append("\n AND i.entidade = :entidade ");
hql.append("\n AND i.empresa = :empresa ");
hql.append("\n ORDER BY SUBSTRING(i.mesAnoInicio, 1, 4) DESC ");
Query query = em.createQuery(hql.toString());
query.setParameter("declaracao", declaracao);
query.setParameter("processadaAssinada", StatusIdentificacaoEnum.PROCESSADA_E_ASSINADA);
query.setParameter("pago", StatusIdentificacaoEnum.PAGO);
query.setParameter("empresa", empresa);
query.setParameter("entidade", entidade);

Se coloco assim ORDER BY CAST(SUBSTRING(i.mesAnoInicio, 1, 4) AS Int) DESC

ou assim: ORDER BY CAST(SUBSTRING(i.mesAnoInicio, 1, 4) AS Integer) DESC

Da erro.