2012-02-07 31 views
13

Có thể truy vấn grails với tiêu chí và nhận danh sách bản đồ thay vì danh sách các danh sách không? Tôi muốn có các tên cột trong các kết quả để sau đó làm việc với một 'mảng kết hợp' thay vì sau đó bù đắp mảng số. Tôi hiện đang làm một cái gì đó nhưTruy vấn Grails với tiêu chí: cách lấy lại bản đồ có cột?

def topFiveUsers = BlogEntry.createCriteria().list { 
     projections { 
      count('id') 
      groupProperty('author') 
     } 
     maxResults 5 
    } 

Kết quả nào trong [[123, app.User:1][111, app.User:2][...]...], tức là danh sách danh sách. Tôi thà muốn một cái gì đó như [[posts:123, author: app.User:1][posts: 111, author app.User:2][...]...].

Như thường lệ: trợ giúp được đánh giá cao!

Trả lời

2
def topFiveList = [] 
topFiveUsers.each { rec -> 
    topFiveList << [posts: rec[0], author: rec[1]] 
} 
2
def converted = topFiveUsers.collect{ [posts: it[0], author: it[1]] } 
+0

Cảm ơn bạn đã trả lời. Tất nhiên tôi có thể chuyển đổi kết quả sau này - đó là những gì tôi đang làm vào lúc này. Sau đó, một lần nữa tôi muốn bỏ qua chi phí của quá trình hậu xử lý kết quả. Tôi đoán rằng một nơi nào đó trong mã ngủ đông sự chuyển đổi rất giống nhau xảy ra anyway ... – fluxon

+0

Ngay sau khi tôi đăng, nó xảy ra với tôi rằng bạn không quan tâm đến một giải pháp hai bước. –

+0

Đừng lo! Cảm ơn bạn anyway cho sự hỗ trợ của bạn! se chỉ là tuyệt vời! – fluxon

30

Sử dụng resultTransformer(). Khi tham số sử dụng CriteriaSpecification.ALIAS_TO_ENTITY_MAP
Tài liệu và ví dụ về chủ đề này rất hiếm. Nhưng đây là ví dụ:

import org.hibernate.criterion.CriteriaSpecification 

BlogEntry.withCriteria { 
    maxResults 5 
    resultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP) 
    projections { 
    count('id', 'total') 
    groupProperty('author', 'author') 
    }  
} 

Lưu ý rằng bí danh là bắt buộc đối với tất cả các phép chiếu. Nếu không, bản đồ kết quả sẽ bao gồm các giá trị rỗng.

+0

Rực rỡ và thanh lịch. Cảm ơn bạn rất nhiều Sergey. –

+0

Tuyệt vời ....... Cảm ơn bạn rất nhiều .... – akiong

Các vấn đề liên quan