문제

마지막 이름과 이름을 말하는 두 필드가 목록을 주문할 수있는 방법이 있습니까?

알아요 .listOrderByLastAndFirst 그리고 .list(sort:'last, first') 작동하지 않습니다.

도움이 되었습니까?

해결책

이 오래된 솔루션은 더 이상 작동하지 않습니다. 아래의 Mattlary의 답변을 참조하십시오

HQL에 사용자 정의 찾기를 작성하거나 기준 빌더를 사용해야 할 수도 있습니다.

MyDomain.find("from Domain as d order by last,first desc")

또는

def c = MyDomain.createCriteria()
def results = c.list {
       order("last,first", "desc")
}

다른 팁

hates_ 기준 답변은 나에게 효과가없는 것 같습니다. 퍼팅 "last,first" 순서대로 예외 만 말하면 "Property 'last,first' not found". 두 분야에서 주문하려면 다음을 수행 할 수 있습니다.

def c = MyDomain.createCriteria()
def results = c.list {
    and{
       order('last','desc')
       order('first','desc')
    }
}

이것은 꽤 오래되었지만 적절한 솔루션을 찾는 데 도움이되었습니다. withcriteria 바로 가기를 사용하여 "클리너"코드 예제 :

def c = MyDomain.withCriteria {
    and {
        order('last', 'desc')
        order('first', 'desc')
    }
}

더 복잡한 주문 기준 (Grails 2.1.0에서 테스트)

def c = MyDomain.withCriteria {
    property {
        order('last', 'desc')
    }
    order('first', 'desc')
}

mydomain.property.last에 의해 먼저 정렬됩니다

이 쿼리는 First Field를 기반으로 작업 중입니다. 첫 번째 필드가 비워지면 두 번째 필드에 의해 단락됩니다.

order('last','desc')
order('first','desc')

기준이 최선의 방법이라고 생각하지만 먼저 파인더를 시도하여 올바른 일을했습니다. GORM에서 도메인 객체를 검색 할 때, 시도를하기위한 올바른 순서는 동적 파인더, 기준, HQL입니다.

당신은 이것을 할 수 있습니다

def results=MyDomain.findAll([sort:"last",order:'desc'],[sort:"first",order:'desc']);

이 코드 라인은 먼저 도메인 클래스 "mydomain"에서 먼저 성의 이름으로, 그 다음 사람의 이름으로 결과를 정렬합니다.

MyDomain.findAll(sort: ['first': 'desc','last':'desc'])

Grails-Datastore-Gorm과 함께 작업 : 6.0.3

항목의 내용을 정렬하는 경우 여러 속성을 기반으로 정렬 순서를 결정할 수있는 일부 스마트가있는 비교기를 구현해야합니다.

그루비 스타일 비교기의 일부 예가 표시됩니다 여기

그러나 정렬중인 목록이 데이터베이스 쿼리에서 반환되는 경우 CrteriaQuery를 사용하여 정렬하는 것이 좋습니다.

나는 같은 문제가 있습니다. 내 목록이 크지 않기 때문에 링크 된 도메인의 필드를 정렬하고 싶으므로 Groovy 정렬을 사용합니다. Calendardata-> arttraction

def listCalendar (Calendar calendar) {
    respond CalendarData.where {
        calendar == calendar
    }.list().sort{ "$it.attraction.type?:' '$it.attraction.name" }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top