2010-02-23 5 views
2

JPA- 쿼리에서 주문에 문제가 있습니다. 쿼리는 간단하고 sql-client에서 예상대로 작동합니다. 문제는 스웨덴어 문자 å, ä 및 ö (순서대로 있어야 함)입니다. JPA (Hibernate) å와 ä를 통해 쿼리를 실행할 때 잘못된 순서 (ä, å, ö)가 사용됩니다.JPA 주문 문제 및 스웨덴어 문자

테스트 환경에서 Oracle과 HslqDB간에 차이점이없고 로컬 Windows PC와 Linux 시스템간에 차이가 없습니다.

나는 표준 JPA 쿼리, 네이티브 JPA 쿼리, 네이티브 Hibernate 쿼리 및 Hibernate 조건 API를 시도했다. 모든 경우에 순서가 잘못되었습니다.

아이디어가 있으십니까?

답변

1

데이터베이스 세계에서 '데이터 정렬'을 실행 중입니다. 오라클은 여러 언어를 지원하므로 ORDER BY 절을 올바르게 처리 할 것입니다.

Oracle NLS_SORT 세션 변수에 가능한 값에 대한 정보를 Oracle 설명서에서 찾으십시오.

ALTER SESSION SET NLS_SORT = SWEDISH 

그런 다음 오라클 프롬프트에 쿼리를 실행 : 나는 this

이처럼 정렬을 설정했습니다. 모든 연결마다이 값을 설정했는지 확인하는 것이 좋습니다.

그래서 문제는 JPA/Hibernate 또는 JDBC와 관련이 없습니다.

+0

순서는 SQL 클라이언트에서 쿼리를 실행할 때 올바른 것입니다. 응용 프로그램 (JPA)을 통해 실행하면 주문이 변경됩니다. 디폴트로 UTF-8을 사용하는 HSQL (in-memory-mode)을 사용할 때도 같은 문제가 발생합니다. –

+0

문자 인코딩 (UTF-8)은 실제로이 문제와 관련이 없습니다. JPA를 사용할 때 모든 연결은 '오라클 세션'임을 기억해야합니다. 모든 연결은 기본 환경 변수 값으로 생성됩니다. 따라서 NLS_SORT는 원하는 값 (SWEDISH)으로 설정되지 않은 것일 수 있습니다. 따라서 swedish alpabetical collation이 필요한 쿼리를 실행하기 전에 NLS_SORT가 올바르게 설정되어 있는지 확인해야합니다. HSQLDB에 관한 한, 데이터 정렬을 설정하는 다른 방법이 있습니다. 여기를 참조하십시오 : http://hsqldb.org/doc/guide/ch09.html#collation-section –

+0

좋아, 지금 작동하게. nls_sort를 지정하고 nlssort 함수를 사용하여 트릭을 수행했습니다. nlssort (name, 'nls_sort = SWEDISH')의 광고 주문을 선택하십시오. 그러나 나는 그것이 기본으로 데이터베이스 수준으로 설정되어야하는지 또는 jdbc-url의 연결 매개 변수로 가능하지 않은지를 선호합니다. 고맙습니다. –

0

어떤 동면 식 방언을 지정하고 있습니까? 그것은 차이를 만들 수 있습니다. 여기에 article이 관련 문제 (Mysql에도 불구하고)를 다루고 있습니다.

+0

Oracle 용 Oracle10gDialect와 HSQL 용 HSQLDialect를 사용하고있다. –

0

JPA를 dbcp pool과 함께 사용하고 있습니다.

나에게 NLS_SORT는 JAVA_OPTS 매개 변수 "user.language"를 사용하여 수정할 수 있습니다.

제 환경에서는 -Duser.language = pt가 문제를 해결했습니다.