Tiêu chuẩn, về mặt lý thuyết nên có ít bước đầu hơn một truy vấn HQL (trừ cho các truy vấn tên, mà tôi sẽ nhận được). Điều này là do Tiêu chí không cần phải phân tích cú pháp bất cứ điều gì. Truy vấn HQL được phân tích bằng trình phân tích cú pháp dựa trên ANTLR và sau đó kết quả là AST được chuyển thành SQL. Tuy nhiên, với HQL/JPAQL bạn có thể định nghĩa các truy vấn có tên, nơi mà SQL được tạo khi SessionFactory khởi động. Về lý thuyết, truy vấn được đặt tên có ít chi phí hơn tiêu chí. Vì vậy, về chi phí của thế hệ SQL, chúng tôi có:
- Đặt tên truy vấn HQL/JPAQL - SQL chỉ xảy ra một lần.
- Tiêu chí - Không cần phải phân tích cú pháp trước khi tạo.
- (không được đặt tên) Truy vấn HQL/JPAQL - Phân tích cú pháp, sau đó tạo. Điều đó nói rằng, việc lựa chọn một kỹ thuật truy vấn dựa trên chi phí phân tích và tạo SQL có lẽ là một sai lầm trong quan điểm của tôi. Chi phí này thường rất nhỏ khi so sánh với việc thực hiện truy vấn thực sự trên máy chủ cơ sở dữ liệu thực với dữ liệu thực. Nếu chi phí này thực sự hiển thị khi lập hồ sơ ứng dụng thì có thể bạn nên chuyển sang truy vấn được đặt tên.
Dưới đây là những điều tôi cân nhắc khi quyết định giữa Tiêu chuẩn và HQL/JPAQL:
- Trước tiên, bạn phải quyết định nếu bạn OK với việc có một sự phụ thuộc vào API Hibernate độc quyền tại của bạn mã. JPA không có Tiêu chí.
- Tiêu chí thực sự tốt trong việc xử lý nhiều thông số tìm kiếm tùy chọn chẳng hạn như bạn có thể tìm thấy trên một trang web điển hình với một biểu mẫu tìm kiếm nhiều tham số '. Với HQL, các nhà phát triển có khuynh hướng tack vào các mệnh đề với StringBuilder (tránh điều này!). Với tiêu chí, bạn không cần phải làm điều đó.
- HQL/JPAQL có thể được sử dụng cho hầu hết mọi thứ khác, vì mã có xu hướng trở nên nhỏ hơn và dễ dàng hơn cho nhà phát triển để hiểu.
- Truy vấn thường xuyên có thể được chuyển thành truy vấn được đặt tên nếu bạn sử dụng HQL. Tôi thích làm điều này sau, sau khi một số hồ sơ.
Bạn có thể đọc một số thông tin bổ sung ở đây http://tech.puredanger.com/2009/07/10/hibernate-query-cache/
Nguồn
2015-05-18 14:31:37
bạn có thể hiển thị HQL và Tiêu chuẩn truy vấn? –
Truy vấn phụ thuộc vào các tham số. Một trong những quy tắc đơn giản giống như sau: chọn số (*) từ R r trong đó r.ISREPLACEDBY = 0 và r.STATUS = 'OK' và r.A =? và r.C trong (chọn RC riêng biệt từ CX cx, nơi cx.FROMDATE> =? và cx.FROMDATE <=?) – bertolami