Trong Hibernate khi bạn lấy một Entity qua một tải, nếu bạn truy cập mà id accessor Entity của nó không khởi tạo proxy:Khi nào truy xuất id của Hibernate proxy khởi tạo proxy?
Property myProp = (Property) session.load(Property.class, myId);
myProp.getId(); // Doesn't load the proxy
myProp.getDescription(); // Loads the proxy from the database hit
Tuy nhiên, tôi không rõ ràng những gì các quy tắc dành cho proxy hiệp hội bốc. Tôi đã được ấn tượng rằng khi bạn lấy một thực thể thông qua một truy vấn HQL hoặc tiêu chí các quy tắc tương tự áp dụng.
Mỗi Property
trong mã của tôi có Company
. Các Company
được khai báo như vậy:
@ManyToOne(fetch = FetchType.LAZY, optional=false)
@JoinColumn(name = "company_id", nullable=false)
private Company company;
Tuy nhiên, trong mã của tôi tôi đang nhận được N + 1 Selects khi iterating qua Properties
vì Company
đang được nạp khi tôi gọi Company.getId()
.
Trong cả hai đối tượng Company
và Property
, trường id là chú thích dài với @Id
.
Có một số cân nhắc khác mà tôi đang thiếu để ngăn việc tải thực thể Company
không?
Câu trả lời là một khởi đầu tuyệt vời nhưng nhận xét đầu tiên là câu trả lời hay nhất. Hãy chắc chắn để đọc liên kết mà Gennady Shumakher đăng. Ngoài ra, nếu có ai đó tò mò có một lỗi trong cơ sở dữ liệu Hibernate về vấn đề này mà tôi đã tìm thấy: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3718 – jbarz