45

Khi không có hàng, cả query.list() và criteria.list() đều trả về danh sách trống thay vì giá trị null. Lý do đằng sau điều này là gì?phương thức query.list() hibernate trả về danh sách trống thay vì giá trị rỗng

+0

tại sao bạn muốn null? Tôi hiểu khi bạn truy vấn cho một kết quả duy nhất - không tìm thấy sẽ có ý nghĩa để trả về null. Nhưng danh sách() phải luôn trả về một danh sách trống! Ý nghĩa của một danh sách rỗng là gì? – ACV

Trả lời

86

Lý do không phải là bắt buộc kiểm tra null trong mã máy khách, nhất quán với Effective Java 2nd Edition, mục 43: Trả lại mảng hoặc bộ sưu tập trống, không phải là rỗng.

Điều này làm cho mã máy khách đơn giản hơn và ít bị lỗi hơn (và rất có thể là việc triển khai phương pháp).

Thành ngữ trả về rỗng có khả năng là lưu giữ từ ngôn ngữ lập trình C, trong độ dài mảng được trả lại riêng biệt với mảng thực tế. Trong C, không có lợi thế để phân bổ một mảng nếu số không được trả về dưới dạng độ dài.

+0

hmm ... nhưng ngay cả khi nó đang ngăn chặn kiểm tra null, chúng tôi vẫn phải kiểm tra kích thước của danh sách ... phải không? và cũng như là một thực hành tốt, chúng tôi luôn luôn kiểm tra cho null cũng (ít nhất là trong nhóm của chúng tôi). – Reddy

+12

Đó là vấn đề - nếu bạn chắc chắn (dựa trên lời hứa của một API) rằng một giá trị không thể là rỗng, thì bạn không kiểm tra giá trị rỗng. Và không, bạn không cần phải kiểm tra kích thước. Khi bạn lặp lại bộ sưu tập, nó sẽ bỏ qua bước lặp. – Bozho

+0

okay ... hiểu rồi. Nếu nó là một null và như tôi khách hàng nếu tôi đã không kiểm tra nó, NPE có thể mang xuống ứng dụng của tôi. Nhưng nếu nó là một bộ sưu tập trống, nó sẽ chỉ bỏ qua logic và tiếp tục (như chúng ta thường kiểm tra kích thước anyways). Cảm ơn Peter và Bozho. – Reddy

10

Đó là sự thống nhất: danh sách được trả về với tất cả các kết quả, cho dù có bất kỳ kết quả nào hay không.

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