2010-10-29 26 views
5

Tôi đã cố gắng tạo một trình tạo tiêu chí có chứa quan hệ phụ thuộc và chưa thành công. Hãy xem xét các mô hình sau:Không thể tạo grails Truy vấn tiêu chí có chứa một quan hệ thuộc về Tổ chức

class Msg { 
    ... 
    static belongsTo = [user: User] 
    ... 
} 

class User { 
    ... 
    Organisation organisation 
    ... 
} 

Tôi đang cố gắng để làm cho truy vấn sau đây:

Msg.createCriteria().list() { 
    ... 
    user { 
     eq("organisation", organisationInstance) 
    } 
    ... 
} 

Tất cả tôi nhận được là các lỗi sau

ERROR errors.GrailsExceptionResolver - No signature of method: static User.call() is applicable for argument types: (MsgService$_findMessages_closure1_closure6) values: [[email protected]] 
Possible solutions: save(), wait(), any(), getAll(), save(java.lang.Boolean), save(java.util.Map) 

Tôi đã cố gắng để thêm các bổ sung nhỏ khác nhau vào truy vấn tiêu chí như:

join "user" 
fetchMode("user", org.hibernate.FetchMode.EAGER) 

Nhưng vẫn nhận được cùng một vấn đề.

Tôi thậm chí đã cố gắng để thêm ánh xạ tĩnh sau vào lớp Msg:

static mapping = { 
    columns { 
     user lazy: false 
    } 
} 

Vẫn không làm việc.

Có cách nào để sử dụng trình tạo tiêu chí chứa truy vấn thuộc tính không?

Cảm ơn sự giúp đỡ của bạn trước.
Lucien

Trả lời

5

Tôi đã tìm ra giải pháp! Vấn đề không liên quan đến trình xây dựng tiêu chí. Trong trường hợp này, tôi đã có một biến người dùng bên trong phạm vi. Khi đã bị xóa, nó hoạt động như một nét duyên dáng :-)

+0

nó đã giúp sau khi đập đầu tôi trong thời gian dài. Lỗi không đưa ra bất kỳ loại đầu mối nào về vấn đề này. Cám ơn vì đã chia sẻ –

2
def criteria = Msg.createCriteria() 
results = criteria.list{ 
    user{ 
     eq("organisation", organisationInstance) 
    } 
} 
+0

Sự khác biệt trong ví dụ trên là gì? –

+0

câu lệnh createCritia của bạn có vẻ không chính xác, bị thiếu "()" –

+0

Xin lỗi, tôi đã viết sai chính tả. Tất nhiên nó phải chứa "()". Sửa chữa. –

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