Dalla mia esperienza te lo dico. Esistono due scenari
1) Si desidera specificare un parametro nella query il cui valore è impostato in modo dinamico.
eg: where user_id = :userId
Qui non avrai alcun problema se stai impostando un parametro con lo stesso nome di "userId";
2) Stai digitando il valore
eg: select count(id) :: integer
quando lo fai devi usare il carattere di escape altrimenti l'ibernazione penserà che sia un parametro. E darà un errore "Tutti i parametri non sono impostati " puoi superare questo problema scrivendo il codice usando il carattere di escape
eg:select count(id) \\:\\: integer
Quindi questo risolverà il tuo problema. E se usi erroneamente la barra in avanti anziché la barra all'indietro, riceverai l'errore "spazio non consentito dopo il prefisso"
Wrong: select count(id)//://: integer
Right: select count(id)\\:\\: integer
Ma ti consiglio vivamente di usare la funzione CAST invece di usare "::"
questa sala operatoria select CAST(count(id) as integer)
È il modo migliore per digitare il cast e porterà a errori minimi