[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.당신이 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.난 그냥이 문제가 있었 캐스트를 사용했다, 그래서 그것을 작동하도록 몇 가지 물건을 시도했다. 당신은 도망갔습니다. 동면 상태에서 \
난 그냥이 문제가 있었 캐스트를 사용했다, 그래서 그것을 작동하도록 몇 가지 물건을 시도했다. 당신은 도망갔습니다. 동면 상태에서 \
그러나, java에서는 \로 시작하여 \을 인쇄하려면 \로 이스케이프해야합니다. 그래서, 당신이 넣고 싶다면 : SQL 하이버 네이트 쿼리에, 당신은 그것을 작성해야합니다 : \\ :
그리고 제 경우와 같이 PostgreSQL에서 캐스팅하고 싶다면 다음과 같이해야합니다 : field \\ : \\ : int 일부 필드를 정수로 형변환하려는 경우 int.
-
==============================
3.http://www.postgresql.org/docs/8.1/static/sql-createcast.html을 살펴보십시오.
http://www.postgresql.org/docs/8.1/static/sql-createcast.html을 살펴보십시오.
캐스트를 사용해보십시오. 나에게 그것은 매력처럼 일했다.
-
==============================
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.명명 된 매개 변수는 다음과 같이 콜론 ':'을 사용합니다.
명명 된 매개 변수는 다음과 같이 콜론 ':'을 사용합니다.
-
==============================
6.너 탈출 : with :. 나는 생각한다.
너 탈출 : with :. 나는 생각한다.
또는 네이티브 퀘스트를 시도하십시오.
from https://stackoverflow.com/questions/7475876/using-hibernate-query-colon-gets-treated-as-parameter-escaping-colon by cc-by-sa and MIT license