2011-01-04 24 views
7

Tôi đang cố tải Phụ huynh riêng biệt bằng Tiêu chí trong Grails. Truy vấn là như saucách nhận kết quả riêng biệt bằng cách sử dụng Phép chiếu và Tiêu chí

Query:

def criteria = Parent.createCriteria(); 
     results = criteria.list(max:params.max, offset:params.offset){ 
      projections{ groupProperty('id') } 
      children{ 
       books{ 
        like('title',"%book") 
        } 
       } 
      order("id","asc") 
     } 

miền Lớp

class Parent { 

    String name 

    static hasMany = [children:Child] 

    static constraints = { 
    } 
} 


class Child { 

     String name 
     Parent parent 

     static belongsTo = [parent:Parent] 
     static hasMany = [books:Book] 
     static constraints = { 
     } 
    } 


class Book { 

     String title 
     Child child 

     static belongsTo = [child:Child] 
     static constraints = { 
     } 
    } 

Câu hỏi: Tôi không thể nhận được dòng chuyên biệt.

Phương pháp tiếp cận được chấp nhận khác và kết quả của chúng: Tôi không biết lý do tại sao groupProperty không hoạt động. Tôi đã thử riêng biệt trong các dự án thay vì groupProperty và nó không phải là trái cây quá !. nếu tôi sử dụng tiêu chí.listDistinct thay vì tiêu chí.list thì tôi có thể nhận được Dòng cha mẹ riêng biệt nhưng cách tiếp cận trước đó yêu cầu phải nhận được totalCount từ truy vấn bổ sung để phân trang. Vì vậy tôi rất marry trong việc Rows Chánh biệt sử dụng criteria.list

Cảm ơn trước

+0

Mục tiêu cuối cùng của bạn là gì? Bạn đang cố gắng để có được một danh sách các bậc cha mẹ có con có sách phù hợp với một tiêu đề cụ thể? – Pat

+0

thực sự tôi muốn tải tất cả các bậc cha mẹ, độc đáo, những người có trẻ em với sách có tiêu đề '% M%' và có vấn đề là groupproperty. Kết quả không chứa cha mẹ riêng biệt. Nếu khó hiểu truy vấn thì hãy thay thế mệnh đề truy vấn đã nói ở trên bằng "trẻ em { trẻ em { như ('name'," pau% ") } } thứ tự (" id "," asc ") – Rehman

+0

mối quan hệ: Phụ huynh: Trẻ em [1: N] và Trẻ em: Sách [1: N] – Rehman

Trả lời

3

Bạn có thể đạt được tác dụng tương tự như với criteria.listDistinct nếu bạn thay đổi tiêu chí truy vấn để bao gồm biệt kết quả thực thể gốc biến như này:

results = criteria.list(max:params.max, offset:params.offset){ 
     children{ 
      books{ 
       like('title',"%book") 
       } 
      } 
     resultTransformer Criteria.DISTINCT_ROOT_ENTITY    
     order("id","asc") 
    } 

tuy nhiên có một lý do tại sao grails không trả lại kết quả paged cho cuộc gọi listDistinct vì thế nó có thể là một trường hợp phải nhờ đến một truy vấn HQL với các nhà điều hành in

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