Da minha experiência eu vou te dizer. Existem dois cenários
1) Você deseja especificar um parâmetro na consulta cujo valor seja definido dinamicamente.
eg: where user_id = :userId
Aqui você não terá nenhum problema se estiver definindo o parâmetro com o mesmo nome de "userId";
2) Você está digitando o valor
eg: select count(id) :: integer
quando você está fazendo isso, você deve usar o caractere de escape, caso contrário, o hibernate pensará que é um parâmetro. E dará um erro "Todos os parâmetros não estão definidos " você pode superar isso escrevendo código usando o caractere de escape
eg:select count(id) \\:\\: integer
Portanto, isso resolverá seu problema. E se você for usado incorretamente a barra invertida em vez da barra invertida, receberá o erro "espaço não é permitido após o prefixo"
Wrong: select count(id)//://: integer
Right: select count(id)\\:\\: integer
Mas eu recomendo que você use a função CAST em vez de usar
"::"
este operador select CAST(count(id) as integer)
É a melhor maneira de conversão de tipos e levará a erros mínimos