2012-01-20 33 views
12

Giả sử tôi có một lớp tên miền được gọi là "Người dùng" có thể theo dõi các đối tượng "Người dùng" khác. Nó không nên có một lĩnh vực cụ thể như:Làm cách nào để tìm kiếm các phần tử có bộ sưu tập chứa phần tử khác trong Grails?

def hasMany=[followedUsers:User] 

tôi cần phải làm điều ngược lại (tất cả đối tượng người dùng mà theo một đối tượng dùng cụ thể) mà không cần thiết lập mối quan hệ ngược lại, vì nó không phải là một trường hợp sử dụng thực hiện thường . Tôi đã cố thực hiện một việc như thế này, bằng cách đóng:

User.findAll { it.followedUsers.contains(userInstance) } 

nhưng điều này luôn trả về tất cả người dùng trong cơ sở dữ liệu, bất kể trạng thái theo dõi của họ. Tôi đã thử làm với HQL nhưng thất bại thảm hại là tốt.

Có ai có thể cho tôi một con trỏ nhanh về cách đơn giản nhất để thực hiện việc này không? Cảm ơn bạn.

Trả lời

13

Bạn có thể sử dụng truy vấn HQL này:

User.executeQuery(
    'select u from User u where :follower in elements(u.followedUsers)', 
    [follower: userInstance]) 
+2

Thank you very much. Tôi đã làm 'def followers = User.findAll (" từ User ở đâu? Trong phần tử (followUsers) ", [userInstance])'. Tôi đã thực sự thử giải pháp này trước đây nhưng đã bỏ lỡ lệnh 'elements()' để hoàn thành nó. – ArmlessJohn

0

Theo tôi, cú pháp này là nhiều bụi:

User.withCriteria { followedUsers{ eq('id', userInstance.id) } } 
Các vấn đề liên quan