2010-05-08 4 views
8

최대 절전 모드 네이티브 쿼리에 문제가 있습니다. 배열 슬라이스 (PostgreSQL 데이터베이스)를 선택하는 하나의 SELECT가 있습니다.Hibernate Native 명명 된 매개 변수로 질의 문제가 발생했습니다.

문제는 hibernate가 명명 된 매개 변수로 "SELECT my_array [1 : 300] ..."에서 ": 300"부분을 인식하고 다음 예외가 발생한다는 것입니다. 모든 명명 된 매개 변수가 설정되지 않았습니다.

':', '::'과 함께 콜론 (:)을 이스케이프하려고했지만 성공하지 못했습니다.

최대 절전 모드 버전 3.2

답변

4

내가 PostgreSQL을 사용하지 않는 것입니다하지만 당신은 당신이 인터셉터를 구현할 수있는이 문제에 대한 적절한 해결책을 찾을 수없는 경우 (EmptyInterceptor를 확장 (extend)해야한다) 및 onPrepareStatement(String sql)에 쿼리를 수정합니다.

즉, my_array[1|300]과 같은 것을 사용하고 이름이 지정된 매개 변수 문제를 해결하기 위해 my_array[1:300]으로 다시 쓸 수 있음을 의미합니다.

편집 : 위의 작동 (네이티브 SQL 재 작성 및 쿼리 파서가 특수 문자를 허용하는지 여부)이 100 % 확실하지 않습니다. 위의 HQL과 조건에서 쿼리 힌트로 인덱스 힌트를 전달하는 위의 작업 만 수행했습니다.

+0

감사를

<property name="hibernate.ejb.interceptor" value="MyInterceptor"/> 

을 잊지 마세요 – dime

3

Hibernate 자체에서 콜론을 이스케이프 할 수 없습니다 (2005 년부터 Bug로 알려짐).

1

이제이 함수를 대신 호출하십시오. 그것을 시도하지 않았지만 어떻게 든이 일을 할 것입니다.

1

MyInterceptor extends EmptyInterceptor은 cherouvim에서 언급 한대로 작동합니다.

는 :) 기본 쿼리로도 작동이 persistence.xml에

관련 문제