Trong dự án của chúng tôi, chúng tôi có một thực thể 'Nhà hàng' với gần 30 trường (một số có mối quan hệ với các thực thể khác). Vì vậy, mỗi lần chúng ta cần một đối tượng 'Nhà hàng' ngay cả đối với một vài lĩnh vực, tất cả các trường khác đều được truy xuất. Điều này ảnh hưởng đến hiệu suất. Vì vậy, trong tệp HBM, chúng tôi đã viết hai lớp, cả hai đều trỏ đến cùng lớp vật lý và cùng một bảng cơ sở dữ liệu, như được hiển thị bên dưới.Cách ánh xạ hai thực thể JPA hoặc Hibernate trên cùng một bảng cơ sở dữ liệu
=== restaurant.hbm.xml ===
<!-- Light Weight Version -->
<class name="com.raj.model.Restaurant" table="RESTAURANTS" entity-name="RestaurantLite"
dynamic-update="false" dynamic-insert="false">
<cache usage="read-only"/>
<!-- few basic properties and relationships -->
</class>
<!-- Restaurant -->
<class name="com.raj.model.Restaurant" table="RESTAURANTS" entity-name="Restaurant">
<!-- all properties and relationships -->
</class>
Trong một trong các triển khai DAO, chúng tôi đang sử dụng Tiêu chí nhận 'RestaurantLite' và danh sách các nhà hàng trả lại như minh họa bên dưới.
Criteria criteria = session.createCriteria("RestaurantLite");
// criteria related stuff
return new LinkedHashSet<Restaurant>(criteria.list());
Bây giờ, chúng tôi muốn xóa tất cả các tệp hbm và sử dụng chú thích. Vì vậy, làm thế nào cùng có thể được thực hiện bằng cách sử dụng chú thích cho entites? Chúng ta có cần tạo thêm một lớp 'RestaurantLite' không? Nếu sau đó, cách các tiêu chí trên trả về các đối tượng 'Nhà hàng'?
Điều này ảnh hưởng đến hiệu suất. Đến mức độ nào? Bạn đã đo? Theo lưu ý tài liệu Hibernate: tối ưu hóa hàng đọc là quan trọng hơn nhiều so với tối ưu hóa đọc cột. Tuy nhiên, chỉ tải một số thuộc tính của một lớp có thể hữu ích trong ** trường hợp cực **. Ví dụ: khi các bảng cũ có ** hàng trăm ** cột và mô hình dữ liệu không thể được cải thiện. https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html#performance-fetching-lazy –
@Alan Hay Chúng tôi có một cơ sở dữ liệu với hàng nghìn bản ghi cho mỗi bảng. Lớp học được đề cập ở trên là cần thiết cho hầu hết các hoạt động. Vì vậy, lấy tất cả các thuộc tính cho mỗi nhà hàng mỗi lần chắc chắn tác động đến hiệu suất. Vì vậy, chúng tôi đã đưa ra giải pháp đó trong các tệp hbm. – Raj44
Tất cả cơ sở dữ liệu đều có hàng nghìn, hàng chục nghìn hàng triệu hàng. Như các tài liệu Hibernate chỉ ra tối ưu hóa cột hiếm khi đáng giá. http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize –