2013-08-19 6 views
1

명명 된 쿼리의 목록에서 대/소문자를 구분하도록 지정하는 방법이 있습니까? Grails 2.2 이전에는 Grails 2.2.3이 작동하지 않았지만 Grails 2.2.3에서는 작동하지 않는다고 생각합니다 ...MongoDB가있는 Grails의 명명 된 쿼리 목록 메서드에서 대/소문자를 구분하지 않음

이것은 명명 된 쿼리를 호출하고 사례 정렬을 나열하는 코드입니다 무신경 한 방법.

BackendUser.filter(company,filter).list(max:max,offset:offset,"sort":sortName,order:order,ignoreCase:true) 

당신이 볼 수 있듯이

, 나는하여 ignoreCase 추가 시도했다 : 진정한 옵션을했으나 제대로 동작하지 않습니다. 다른 정렬 옵션이 필요한 다른 위치에서 사용하기 때문에 명명 된 쿼리에 정렬을 추가 할 수 없습니다. 죄송합니다, 내가 MongoDB를 사용하고 있음을 언급하는 것을 잊었다 나는 문제

+0

ilike는 대소 문자를 구분하지 않습니다. 당신은 Hibernate가'lower()'와 함께 질의를 출력해야 함을 sql의 로그에서 볼 수있다. –

+0

나는 주문 자체를 의미하는 것이 아니라 주문하는 것을 의미합니다. ilike는 괜찮습니다. 문제는 'AAA'. 'aaa,'BBB '와 같이 이름으로 예를 들어 정렬 할 때입니다. 'AAA', 'BBB', 'AAA', 'AAA', 'BBB'대신에 'AAA', 'BBB', 'AAA'를 주문합니다. – Eylen

+0

안녕하세요 @ 아이렌 어떻게 문제를 해결 했습니까? 나는 동일한 것을 달성 할 필요가있다, 나는 named queries 내부에 정렬을 넣고 싶지는 않지만, named query의 내부리스트 메소드를 넣고 싶다. –

답변

0

에게의 원인이 하나라고 생각 :이 필요한 이런 경우에

,이 명명 된 쿼리를

static namedQueries = { 
    filter {company,filter-> 
     eq 'company',company 
     if (filter.firstName){ 
      ilike 'firstName',"%${filter.firstName}%" 
     } 
     if (filter.lastName){ 
      ilike 'lastName',"%${filter.lastName}%" 
     } 
     if (filter.email){ 
      ilike 'email',"%${filter.email}%" 
     } 
    } 
} 

EDIT입니다 here을 보면 다음과 같이 할 수 있습니다.

//pass dir to your named query 
order(new Order(param, dir=='asc').ignoreCase()) 
+0

다른 정렬에서이 명명 된 쿼리를 사용하기 때문에 목록 메서드에서 명명 된 쿼리에 정렬을 추가하지 않는 것이 좋습니다. – Eylen

+0

다른 정렬을 처리하려면 namedQuery에 param으로 전달하고 처리하십시오. . –

+0

은 많은 코드를 변경해야합니다 ... – Eylen