getAll
là phiên bản nâng cao của get
có nhiều id và trả về một List
trường hợp. Kích thước danh sách sẽ giống như số id được cung cấp; bất kỳ lỗi nào sẽ dẫn đến một số null
tại vị trí đó. Xem http://grails.org/doc/latest/ref/Domain%20Classes/getAll.html
findAll
cho phép bạn sử dụng truy vấn HQL và hỗ trợ phân trang, nhưng chúng không giới hạn trong trường hợp của lớp gọi điện để tôi sử dụng executeQuery
thay thế. Xem http://grails.org/doc/latest/ref/Domain%20Classes/findAll.html
list
tìm tất cả các phiên bản và hỗ trợ phân trang. Xem http://grails.org/doc/latest/ref/Domain%20Classes/list.html
get
truy xuất một cá thể bằng id. Nó sử dụng bộ nhớ cache dụ, vì vậy nhiều cuộc gọi trong cùng một phiên Hibernate sẽ dẫn đến nhiều nhất một cuộc gọi cơ sở dữ liệu (ví dụ: nếu phiên bản nằm trong bộ nhớ cache cấp 2 và bạn đã bật bộ nhớ cache này).
findById
là một công cụ tìm năng động, giống như findByName
, findByFoo
vv Như vậy nó không sử dụng bộ nhớ cache dụ, nhưng có thể được lưu trữ nếu bạn có kích hoạt bộ nhớ đệm truy vấn (thường không phải là một ý tưởng tốt). get
nên được ưu tiên vì bộ nhớ đệm của nó thông minh hơn rất nhiều; kết quả truy vấn được lưu trong bộ nhớ cache (ngay cả đối với một cá thể đơn lẻ như thế này) được xóa bi quan thường xuyên hơn bạn mong đợi, nhưng bộ nhớ cache của cá thể không cần phải quá bi quan.
Trường hợp sử dụng một lần mà tôi có cho findById
là séc liên quan đến bảo mật, được kết hợp với một thuộc tính khác. Ví dụ: thay vì truy xuất cá thể CreditCard
bằng cách sử dụng CreditCard.get(cardId)
, tôi sẽ tìm thấy người dùng hiện đã đăng nhập và sử dụng CreditCard.findByIdAndUser(cardId, user)
. Điều này giả định rằng CreditCard
có thuộc tính User user
. Bằng cách đó, cả hai thuộc tính phải khớp nhau và điều này sẽ chặn một hacker truy cập vào cá thể thẻ vì id thẻ có thể khớp, nhưng người dùng sẽ không.
Nguồn
2012-01-18 19:53:14
Tuy nhiên, nếu bạn đang sử dụng bộ lọc ngủ đông, bạn cần sử dụng Book.findById(). Book.get() bỏ qua bộ lọc. –
@Brad thêm câu trả lời này làm câu trả lời và toàn bộ nhóm của tôi sẽ upvote – Armand