복붙노트

[SPRING] 최대 절전 모드 쿼리 사용 : 콜론은 매개 변수로 처리되거나 콜론은 이스케이프 처리됩니다.

SPRING

최대 절전 모드 쿼리 사용 : 콜론은 매개 변수로 처리되거나 콜론은 이스케이프 처리됩니다.

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

오류가 발생했습니다.

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

HQL에서 어떻게이 구문을 사용할 수 있습니까?

기본적으로 문제는 내 쿼리에서 콜론 (:)을 사용하려고하지만 콜론을 볼 때 하이퍼 네이트가 매개 변수라고 생각합니다 (: parameterName은 HQL의 매개 변수 구문입니다). 내 2에서 볼 수 있듯이 : id 및 : 일).

하지만 지금 () :: date 문을 사용할 때 특정 postgreSQL 구문입니다. 최대 절전 모드는 모든 것을 망칠 수 있습니다.

해결법

  1. ==============================

    1.당신이 Postgres에 있기 때문에 나는 날짜 ()를 완전히 바꿀 것이다 :

    당신이 Postgres에 있기 때문에 나는 날짜 ()를 완전히 바꿀 것이다 :

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

    http://www.postgresql.org/docs/8.2/static/functions-datetime.html을 참조하십시오.

  2. ==============================

    2.난 그냥이 문제가 있었 캐스트를 사용했다, 그래서 그것을 작동하도록 몇 가지 물건을 시도했다. 당신은 도망갔습니다. 동면 상태에서 \

    난 그냥이 문제가 있었 캐스트를 사용했다, 그래서 그것을 작동하도록 몇 가지 물건을 시도했다. 당신은 도망갔습니다. 동면 상태에서 \

    그러나, java에서는 \로 시작하여 \을 인쇄하려면 \로 이스케이프해야합니다. 그래서, 당신이 넣고 싶다면 : SQL 하이버 네이트 쿼리에, 당신은 그것을 작성해야합니다 : \\ :

    그리고 제 경우와 같이 PostgreSQL에서 캐스팅하고 싶다면 다음과 같이해야합니다 : field \\ : \\ : int 일부 필드를 정수로 형변환하려는 경우 int.

  3. ==============================

    3.http://www.postgresql.org/docs/8.1/static/sql-createcast.html을 살펴보십시오.

    http://www.postgresql.org/docs/8.1/static/sql-createcast.html을 살펴보십시오.

    캐스트를 사용해보십시오. 나에게 그것은 매력처럼 일했다.

  4. ==============================

    4.

    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();
    
  5. ==============================

    5.명명 된 매개 변수는 다음과 같이 콜론 ':'을 사용합니다.

    명명 된 매개 변수는 다음과 같이 콜론 ':'을 사용합니다.

  6. ==============================

    6.너 탈출 : with :. 나는 생각한다.

    너 탈출 : with :. 나는 생각한다.

    또는 네이티브 퀘스트를 시도하십시오.

  7. from https://stackoverflow.com/questions/7475876/using-hibernate-query-colon-gets-treated-as-parameter-escaping-colon by cc-by-sa and MIT license