2013-03-07 48 views
5

Tôi đã được Googling nhưng không hiểu hậu quả của việc gọi phương thức tương quan của javax.persistence.criteria.Subquery en API tiêu chí.Tiêu chí API tương quan

http://www.objectdb.com/api/java/jpa/criteria/Subquery/correlate_CollectionJoin_

Đây là từ cuốn sách Pro JPA2 Mastering API Java Persistence.

Khi tạo các định nghĩa truy vấn tiêu chuẩn API cho truy vấn này, chúng tôi phải tương quan người lao động thuộc tính của dự án và sau đó tham gia nó để các báo cáo trực tiếp để tính mức lương trung bình. Ví dụ này cũng cho thấy việc sử dụng các phương pháp loại() của giao diện Đường dẫn để làm một so sánh đa hình các loại:

CriteriaQuery<Project> c = cb.createQuery(Project.class); 
Root<Project> project = c.from(Project.class); 
Join<Project,Employee> emp = project.join("employees"); 
Subquery<Number> sq = c.subquery(Number.class); 
Join<Project,Employee> sqEmp = sq.correlate(emp); 
Join<Employee,Employee> directs = sqEmp.join("directs"); 
c.select(project) 
.where(cb.equal(project.type(), DesignProject.class), 
     cb.isNotEmpty(emp.<Collection>get("directs")), 
     cb.ge(sq, cb.parameter(Number.class, "value"))); 

nào dòng này làm gì?
Tham gia sqEmp = sq.correlate (emp);

Trả lời

7

Nó cung cấp cho bạn quyền truy cập vào nhân viên được tham chiếu bởi truy vấn chính để bạn có thể sử dụng nó và các bảng trong truy vấn con

+0

cảm ơn bạn. Vì vậy, nó kết dính các truy vấn với nhau? Điều gì sẽ là hậu quả của việc bỏ qua dòng được đề cập ở trên? – pethel

+1

Bạn sẽ không có quyền truy cập vào các nhân viên trong đối tượng 'emp' Join. Vì vậy, bạn sẽ không thể sử dụng 'emp' trong truy vấn con của bạn' sq', nơi bạn thực hiện phép nối với bộ sưu tập 'Employee_.directs'. – mika

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