Utilizzo della query Hibernate: i due punti vengono trattati come parametri / punti di escape

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(); 

ottenere errore:

 org.hibernate.hql.ast.QuerySyntaxException: unexpected token: : 

Come posso usare questa syntax in HQL?

Fondamentalmente il problema è che voglio usare due punti (:) nella mia query, ma quando hibernate vede due punti, pensa che sia un parametro (: parameterName è la syntax per i parametri in HQL), come puoi vedere dai miei 2 usi ( :id and :days ).

Ma quando sto usando l’istruzione now () :: date, è una syntax postgreSQL specifica, l’hibernate rovina tutto.

Dato che sei su Postgres, cambierei completamente la data ():

 return sessionFactory.getCurrentSession(). createQuery("FROM Weather WHERE city_id = :id AND date " + "BETWEEN current_date AND (current_date + (integer :days - 1))"). setInteger("id", city_id).setString("days", days).list(); 

Vedi http://www.postgresql.org/docs/8.2/static/functions-datetime.html

Ho appena avuto questo problema, ho dovuto usare i cast, quindi ho provato alcune cose per farlo funzionare. Scopre di scappare: in letargo con \

Comunque, in java, per stampare \ per cominciare, devi sfuggire con \ .
Quindi, se vuoi mettere un : nella tua query di ibernazione SQL, devi scriverlo come: \\:

E se volessi lanciare in PostgreSQL, come nel mio caso, dovresti, ad esempio: field\\:\\:int se volessi lanciare un campo come numero intero.

Dai un’occhiata a http://www.postgresql.org/docs/8.1/static/sql-createcast.html

Prova a usare il cast. Per me ha funzionato come un fascino.

 return sessionFactory.getCurrentSession(). createQuery("FROM Weather WHERE city_id = :id AND date " + "BETWEEN cast(now() as date) AND cast(now() as date) + (:days - 1)"). setInteger("id", city_id).setString("days", days).list(); 

I parametri con nome prendono i due punti ‘:’ come questo È quello che stavi cercando?

Fuggi : con :: . Credo.

Oppure prova un nativo