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
Eche un vistazo a http://www.postgresql.org/docs/8.1/static/sql-createcast.html
Intenta usar cast. Para mí funcionó como un encanto.
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();