2015-10-20 33 views
27

Sự khác nhau giữa truy vấn, truy vấn gốc, truy vấn được đặt tên và truy vấn đã nhập là gì? Liệu truy vấn 'một mình' có tồn tại hay chỉ là một từ viết tắt? Trong tâm trí của tôi, một Query gốc là một truy vấn được viết bằng sql đơn giản, trong khi một truy vấn được đặt tên có liên quan đến các thực thể (hibernate-mapping). Ai đó có thể giải thích điều này một thời gian ngắn?Sự khác biệt giữa truy vấn, truy vấn gốc, truy vấn được đặt tên và truy vấn đã nhập

Trả lời

29

Query

Query đề cập đến JPQL/HQL truy vấn với cú pháp tương tự như SQL thường được sử dụng để thực hiện báo cáo DML (hoạt động CRUD).

Trong JPA, bạn có thể tạo truy vấn bằng cách sử dụng entityManager.createQuery(). Bạn có thể xem xét API để biết thêm chi tiết.

Trong Hibernate, bạn sử dụng session.createQuery() "

NativeQuery

truy vấn Native đề cập đến các truy vấn sql thực tế (đề cập đến đối tượng cơ sở dữ liệu thực tế). Những truy vấn là các câu lệnh SQL có thể được thực hiện trực tiếp trong cơ sở dữ liệu sử dụng ứng dụng khách cơ sở dữ liệu.

JPA: entityManager.createNativeQuery() Hibernate (triển khai không JPA): session.createSQLQuery()

NamedQuery

Tương tự như cách hằng số được định nghĩa. NamedQuery là cách bạn xác định truy vấn của bạn bằng cách đặt tên cho nó. Bạn có thể định nghĩa điều này trong tệp ánh xạ trong chế độ ngủ đông hoặc cũng sử dụng các chú thích ở cấp thực thể.

TypedQuery

TypedQuery cung cấp cho bạn một tùy chọn để đề cập đến các loại thực thể khi bạn tạo một truy vấn và do đó bất kỳ hoạt động sau đó không cần một diễn viên rõ ràng để loại dự định. Trong khi API bình thường Query không trả lại loại đối tượng chính xác mà bạn mong đợi và bạn cần truyền.

+0

Có hiệu suất, thông lượng, mức tiêu thụ bộ nhớ, sự khác biệt về máy chủ ứng dụng tải giữa các truy vấn khác nhau không? Tôi nghĩ rằng tiêu thụ bộ nhớ NamedQuery lớn hơn truy vấn, nhưng tôi không thể nói giới hạn của các truy vấn để lựa chọn ủng hộ cái nào hay cái khác. Bạn có thể giải thích? cảm ơn trước – Joe

Các vấn đề liên quan