Using Hibernate query : colon gets treated as parameter / escaping colon

前端 未结 6 1301
陌清茗
陌清茗 2020-12-05 18:00
return sessionFactory.getCurrentSession().
            createQuery(\"FROM Weather WHERE city_id = :id AND date \" +
                    \"BETWEEN now()::date AND now         


        
相关标签:
6条回答
  • 2020-12-05 18:33
    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 讨论(0)
  • 2020-12-05 18:43

    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.

    0 讨论(0)
  • 2020-12-05 18:46

    Named parameters take a colon ':' like this Is that what you were looking for ?

    0 讨论(0)
  • 2020-12-05 18:53

    You escape : with ::. I think.

    Or try a nativequery

    0 讨论(0)
  • 2020-12-05 18:58

    Since you're on Postgres, I would change the date() completely:

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

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

    0 讨论(0)
  • 2020-12-05 18:59

    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.

    0 讨论(0)
提交回复
热议问题