Tương ứng là HQL
select header.advmagencymaster.mamaid,
header.advmagencymaster.mamaname,header.trohiono
from ADVRoheader header
Nhưng trong HQL, tốt hơn là nên truy xuất toàn bộ đối tượng để chúng ta cũng có thể sử dụng các thuộc tính khác
from ADVRoheader header
inner join
header.advmagencymaster master
HQL không phụ thuộc vào cơ sở dữ liệu bên dưới mà sẽ giống nhau đối với tất cả các cơ sở dữ liệu (Oracle, Mysql, SQL server, v.v.). Chỉ chúng ta cần thay đổi kết nối Cơ sở dữ liệu trong tệp cấu hình chính.
Các lớp mô hình của bạn sẽ giống như thế này
class ADVMAgencyMaster{
private String mamaid;
private String mamaname; //getters and setters
}
class ADVRoheader{
private String trohiono;
private ADVMAgencyMaster advmagencymaster; // Reference to the ADVMAgencyMaster
//getters and setters}
Bạn đã xác định mối quan hệ nhiều với một trong xml
<many-to-one name="advmagencymaster" class="com.adv.hibernatebean.ADVMAgencyMaster" fetch="select"> <column name="TROHAMAID" /></many-to-one>
Vì vậy, trong khi tải đối tượng ADVRoheader ở chế độ ngủ đông cũng sẽ tải tham chiếu đối tượng bên trong "advmagencymaster".
vì điều này, bạn cần chỉ định lazy ="false" thay vì fetch ="select".
lazy ="true" - lười tải nó sẽ chỉ tải đối tượng mẹ
lazy- "false" - việc tải háo hức sẽ tải đối tượng con (bên trong) cũng với đối tượng mẹ.
thêm cả hai tệp hbm.xml vào tệp cấu hình chính (hibernate.cfg.xml) như sau
<mapping resource="com/ADVRoheader.hbm.xml"></mapping>
<mapping resource="com/ADVRomaster.hbm.xml"></mapping>
ngay trước thẻ đóng của nhà máy phiên tại đây, ánh xạ đang diễn ra với Cơ sở dữ liệu.
Thông thường, đối với các phần tử của trình tạo, chúng ta cần sử dụng kiểu số nguyên và thực hiện thay đổi trong cơ sở dữ liệu.
Lọc bổ sung, chúng ta có thể thêm mệnh đề 'where' sau truy vấn chính. Ở đây chỉ yêu cầu điều kiện tham gia và nó đã được xử lý bởi hibernate.