2011-08-25 1 views
3

, 나는 내가 짓고 있어요 문자열이최대 절전 모드가 내 QUERY를 변경하는 이유는 무엇입니까? 내가 디버깅 경우 IN 연산자와 여러 열이

and (property1 , property2) in (values (0, 5) , (3, 4)) 

것을 볼 수 있지만 최대 절전 모드는 그렇게하지이

and (
    (
    tabAlias.COLUMN1 , tabAlias.COLUMN2 
    ) in (

    values 
    (0, 5) , 
    ) 
) 

처럼 변환하는 것이 좋습니다 생각 추가 () 최대 절전 모드가 추가되었습니다. 그러나 (0, 5), 이후에 왜 나타나지 않습니다. (3, 4) ?? 왜 Hibernate는 똑똑하고 물건을 엉망으로 만들기 위해 노력하고 있습니까?

ps : 저는 DB2 9를 사용하고 있습니다
ps2 : 조건 쿼리를 사용하지 말아주세요. cuz 'somebodyelse의 코드를 수정했습니다. 모든 것을 다시 쓰고 싶지 않습니다. ps3 : 휴대용이 아니라는 것을 알고 있지만 걱정하지 않습니다.

해결 방법은 무엇입니까? 또한 이것을 시뮬레이트하기 위해 다중 OR 절을 사용하고 싶지 않습니다.

+0

나는이 문법을 정말로 모른다. 그래서 여기에 주석으로 제안하고있다 : 당신의'IN'에서'values'가 거기에 속하지 않을 수 있습니까? – Vache

+0

오라클에 대한 사실이지만, DB2에 대한 올바른 구문입니다, 내가 Toad에서 테스트, 작동 :) 만약 내가 (0,5) (모두 추가 할 경우 작동합니다, 0, 5) 및 (3, 4) (3, 4)는 빠져있다. –

+0

쿼리에 mylist를 넣고 setParameterList()를 사용하여 매개 변수를 설정하고 객체 목록 또는 배열을 전달하려고 시도 했습니까? –

답변

0

HQL은 SQL이 아닙니다. Hibernate는 HQL을 파싱하고 그것에 기반한 새로운 SQL 질의를 만든다. HQL에서 지원하지 않는 것을하려는 것 같습니다. 일반적으로 오류가 발생하지만 어떤 이유에서 HQL을 받아들이고 유효하지 않은 SQL을 생성합니다.

SQL을 사용하려면 Session.connection()과 연결할 수 있습니다.

약간 수정하여 구문을 적용 할 수 있습니다. 이 도움이 될 수 은 http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/queryhql.html#queryhql-tuple

이 사람이 동일한 문제가 발생하고 createSQLQuery를 사용하여 전환 같이

보인다 [EDIT()을 해결하기 위해. 최대 절전 모드의 버그 여야합니다.

https://forum.hibernate.org/viewtopic.php?f=1&t=982785&view=previous

[편집]

는 쿼리가 있어야하지 :

and (property1 , property2) in (values ((0, 5) , (3, 4))) 

참고 여분의 괄호.

+0

을 알고있다. 나는 그것을 파싱한다는 것을 알고 있지만, 단지 열과 속성에 변형을 주었다고 생각하지 않는다. –

+0

값을 제거하여 IN 절이 자연스럽지 만 오류가 발생했습니다. [PARSER] : 0 : 0 : 예기치 않은 AST 노드 : {vector} –

+0

쓴 SQL이 정확합니다. Native를 사용하고 싶지 않습니다. 질문, 나는 많은 OR의 –

0

여러 OR 버전을 사용했습니다. 필자의 비즈니스 요구 사항에 따라 필자는 다중 열 IN 버전을 사용하기를 약간 복잡하게 만들었습니다. 이 질문에 대한 대답은 최대 절전 모드에서 지원되지 않으며 손대지 않는 내용을 전달할 수있는 유연성을 제공하지 않습니다.

관련 문제