return sessionFactory.getCurrentSession().
createQuery("FROM Weather WHERE city_id = :id AND date " +
"BETWEEN now()::date AND now()::date + (:days - 1)").
setInteger("id", city_id).setString("days", days).list();
getting error:
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: :
How can I use this syntax in HQL?
Basically the problem is that I want to use colon(:) in my query, but when hibernate sees colon, it thinks that it is a paramter(:parameterName is syntax for parameters in HQL), as you can see from my 2 uses(:id and :days
).
But when I am using now()::date statement, it is specific postgreSQL syntax, hibernate ruins everything.
Since you're on Postgres, I would change the date() completely:
See http://www.postgresql.org/docs/8.2/static/functions-datetime.html
I just had this problem, had to use casts, so I tried some stuff to make it work. Turns out you escape : in hibernate with
\
However, in java, to print
\
to begin with, you have to escape it with\
.So, if you want to put a
:
in your SQL hibernate query, you have to write it like:\\:
And if you wanted to cast in PostgreSQL, such as in my case, you would have to, for example:
field\\:\\:int
if you wanted to cast some field as an integer.Take a look at http://www.postgresql.org/docs/8.1/static/sql-createcast.html
Try using cast. To me it worked like a charm.
You escape
:
with::
. I think.Or try a nativequery
Named parameters take a colon ':' like this Is that what you were looking for ?