Utilisation de la requête Hibernate: le côlon est traité comme paramètre / Echappement du côlon

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

erreur:

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

Comment puis-je utiliser cette syntaxe dans HQL?

fondamentalement, le problème est que je veux utiliser colon (:) Dans ma requête, mais quand hibernate voit colon, il pense que c'est un paramétreur (: parameterName est la syntaxe pour les paramètres dans HQL), comme vous pouvez le voir à partir de mes 2 Utilisations ().

mais quand j'utilise now ():: date statement, c'est la syntaxe spécifique postgreSQL, hibernate ruine tout.

21
demandé sur Rupesh Yadav 2011-09-19 22:55:14

6 réponses

puisque vous êtes sur Postgres, je changerais la date() complètement:

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

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

3
répondu atrain 2011-09-19 20:34:32

je viens d'avoir ce problème, il fallait utiliser des moulages, alors j'ai essayé quelques trucs pour le faire fonctionner. Il s'avère que vous vous échappez : en hibernation avec \

Cependant, en java, pour imprimer \ pour commencer, vous avez à s'échapper avec \.

Donc, si vous voulez mettre un : dans votre requête SQL hibernate, vous devez l'écrire comme:\:

Et si vous avez voulu jeter dans PostgreSQL, comme dans mon cas, il vous faudrait, par exemple: field\:\:int si vous voulais pour lancer un champ comme un entier.

39
répondu SwampDev 2012-08-15 20:32:53

regardez http://www.postgresql.org/docs/8.1/static/sql-createcast.html

essayez d'utiliser cast. Pour moi, il a travaillé comme un charme.

3
répondu Jonathas Pacífico 2014-03-14 18:56:55
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();
0
répondu carlos.romel 2017-11-09 17:34:26

paramètres Nommés prendre les deux points ':' Est-ce que vous recherchez ?

-1
répondu stratwine 2011-09-19 18:59:34

Vous échapper :::. Je pense que.

ou essayez un nativequery

-1
répondu NimChimpsky 2011-09-19 19:51:41