D'après mon expérience, je vais vous dire. Il existe deux scénarios
1) Vous souhaitez spécifier un paramètre dans la requête dont la valeur est définie dynamiquement.
eg: where user_id = :userId
Ici, vous n'aurez aucun problème si vous définissez un paramètre avec le même nom que "userId" ;
2) Vous transtypez la valeur
eg: select count(id) :: integer
lorsque vous faites cela, vous devez utiliser le caractère d'échappement, sinon l'hibernation pensera qu'il s'agit d'un paramètre. Et cela donnera une erreur "Tous les paramètres ne sont pas définis" vous pouvez surmonter cela en écrivant du code en utilisant le caractère d'échappement
eg:select count(id) \\:\\: integer
Cela résoudra donc votre problème. Et si vous utilisez à tort une barre oblique au lieu d'une barre oblique inverse, vous obtiendrez l'erreur "l'espace n'est pas autorisé après le préfixe"
Wrong: select count(id)//://: integer
Right: select count(id)\\:\\: integer
Mais je vous recommande fortement d'utiliser la fonction CAST au lieu d'utiliser "::"
cette opération select CAST(count(id) as integer)
C'est la meilleure façon de transtyper les types et cela conduira à un minimum d'erreurs