query parametros lista left datos consultas consultar con clase java hibernate spring postgresql hql

parametros - query hibernate java



Uso de la consulta Hibernate: colon se trata como parĂ¡metro/escape de dos puntos (6)

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

obteniendo error:

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

¿Cómo puedo usar esta sintaxis en HQL?

Básicamente el problema es que quiero usar dos puntos (:) en mi consulta, pero cuando hibernate ve dos puntos, piensa que es un parámetro (: parameterName es sintaxis para los parámetros en HQL), como puedes ver en mis 2 usos ( :id and :days ).

Pero cuando estoy usando la declaración now () :: date, es una sintaxis específica de postgreSQL, hibernate arruina todo.


Acabo de tener este problema, tuve que usar moldes, así que probé algunas cosas para que funcionara. Resulta que escapas: en Hibernate con /

Sin embargo, en java, para imprimir / para comenzar, tienes que escapar con / .
Por lo tanto, si desea colocar un : en su consulta de hibernación SQL, debe escribirlo como: //:

Y si desea lanzar en PostgreSQL, como en mi caso, tendría que, por ejemplo: field//://:int si desea convertir algún campo como un entero.


Como estás en Postgres, cambiaría la fecha () por completo:

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

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



Los parámetros con nombre toman dos puntos: "así" ¿ this es lo que estabas buscando?


Usted escapa : con :: . Creo.

O prueba un nativequery


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