Từ Hibernate forum:
này từ cuốn sách Hibernate trong hành động. Tốt một đọc ..
Lấy đối tượng bằng cách nhận dạng sau Đoạn mã Hibernate lấy một đối tượng người dùng từ cơ sở dữ liệu:
User user = (User) session.get(User.class, userID);
Các get() phương pháp là đặc biệt bởi vì các định danh xác định duy nhất một cá thể đơn lẻ của một lớp. Do đó, các ứng dụng sử dụng mã định danh là một đối tượng liên tục để xử lý một đối tượng liên tục là một đối tượng cố định với số . Truy xuất bằng số nhận dạng có thể sử dụng bộ nhớ cache khi truy xuất một đối tượng, tránh cơ sở dữ liệu bị truy cập nếu đối tượng đã được lưu trong bộ nhớ cache. Hibernate cũng cung cấp phương thức load():
User user = (User) session.load(User.class, userID);
Phương thức load() cũ hơn; get() được thêm vào API của Hibernate do người dùng yêu cầu . Sự khác biệt là tầm thường:
Nếu tải() không thể tìm thấy đối tượng trong bộ nhớ cache hoặc cơ sở dữ liệu, ngoại lệ là được ném. Phương thức load() không bao giờ trả về null. Phương thức get() trả về nếu không tìm thấy đối tượng.
Phương thức load() có thể trả về proxy thay vì một thực thể liên tục thực. Proxy là trình giữ chỗ kích hoạt tải đối tượng thực khi lần đầu tiên được truy cập ; Trên tay khác, get() không bao giờ trả về proxy. Lựa chọn giữa get() và load() rất dễ dàng: Nếu bạn chắc chắn đối tượng liên tục là tồn tại và không tồn tại sẽ không được coi là ngoại lệ, thì tải() là một tùy chọn tốt là . Nếu bạn không chắc chắn có một trường hợp liên tục với mã định danh nhất định, hãy sử dụng get() và kiểm tra giá trị trả lại để xem giá trị đó có phải là không. Sử dụng tải() có một hàm ý thêm: Ứng dụng có thể truy xuất tham chiếu hợp lệ (một proxy) tới một cá thể liên tục mà không cần nhấn cơ sở dữ liệu để truy lục trạng thái liên tục của nó. Vì vậy, tải() có thể không ném ngoại lệ khi nó không tìm thấy đối tượng liên tục trong bộ nhớ cache hoặc cơ sở dữ liệu; ngoại lệ sẽ được ném sau, khi proxy được truy cập. Tất nhiên, việc truy xuất đối tượng theo số nhận dạng không linh hoạt như sử dụng các truy vấn tùy ý.
Tôi đang gỡ lỗi một vấn đề ngay bây giờ trong đó phiên.Get() đang trả về proxy! –
Cảm ơn rất nhiều! Phần tiền cho tôi là: "Nếu tải() không thể tìm thấy đối tượng trong bộ nhớ cache hoặc cơ sở dữ liệu, ngoại lệ được ném. Phương thức get() trả về null nếu không tìm thấy đối tượng". – Chris
JavaDoc cho Session.get nói: Trả về thể hiện dai dẳng của lớp thực thể đã cho với số nhận dạng đã cho, hoặc null nếu không có cá thể liên tục như vậy. (Nếu cá thể, hoặc một proxy cho cá thể, đã được liên kết với phiên, trả về cá thể hoặc proxy đó.) Vì vậy, phần từ cuốn sách nói: "Mặt khác, get() không bao giờ trả về một proxy." không đúng. – Vicky