Tương đối mới đối với JPA, vì vậy tôi có một loại câu hỏi kiến trúc. Hãy nói rằng tôi có bảng EMPLOYEE và DEPARTMENT với nhiều đến một mối quan hệ (ví dụ: nhiều nhân viên làm việc cho một bộ phận):JPA - cột được tính làm thuộc tính hạng thực thể?
EMPLOYEE
EMPLOYEE_ID
EMPLOYEE_NAME
DEPARTMENT_ID
DEPARTMENT
DEPARTMENT_ID
DEPARTMENT_NAME
Vì vậy, tôi có thể xác định các đối tượng thích hợp cho người lao động và Bộ, không có vấn đề. Tuy nhiên, trong một cái nhìn Tôi muốn hiển thị danh sách các phòng ban với số lượng nhân viên làm việc cho bộ phận đó, một cái gì đó như thế này:
SELECT D.DEPARTMENT_NAME,
(SELECT COUNT(*) FROM EMPLOYEE E WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID) NUMBER_OF_EMPLOYEES
FROM DEPARTMENT D
Tôi chỉ không chắc chắn chiến lược đúng đắn để thực hiện điều này sử dụng JPA là gì. .. Tôi không muốn luôn tìm nạp số lượng nhân viên cho thực thể của Sở vì chỉ có một chế độ xem khi cần.
Dường như Hibernate's @Formula sẽ là một trong những cách tiếp cận có thể, nhưng nó không phù hợp với tiêu chuẩn JPA.
Cảm ơn bạn @MattR cho câu trả lời của bạn. Giải pháp này có thể làm việc cho ví dụ đơn giản này. Nhưng nếu bảng (a) DEPARTMENT có nhiều cột khác ngoài NAME và tôi rõ ràng không muốn liệt kê tất cả chúng trong hàm tạo và (b) tôi vẫn muốn có nó như là thuộc tính của thực thể Bộ (với LAZY fetch loại) để có thể truy cập ở một nơi khác chỉ trong trường hợp. – AndreiM
Câu hỏi hay, tôi chưa thử nó nhưng tôi nghĩ * bạn có thể sử dụng các lớp thực thể trong hàm tạo (vì vậy bạn sẽ không cần phải chọn tất cả các thuộc tính thực thể). Nếu tôi có cơ hội thử nó, tôi sẽ cập nhật câu trả lời của tôi ... tức là bạn có thể có một lớp DepartmentEmployees (nói) có một hàm tạo DepartmentEmployees (Department, Integer) và sử dụng SELECT mới DepartmentEmployees (D, count (E.id))) - không hoàn toàn những gì bạn đang yêu cầu nhưng gần hơn ... – MattR
OK Tôi đã nghĩ về điều này trong bữa ăn trưa, do đó, cập nhật một số thông tin bổ sung. Nếu bạn thử bất kỳ đề xuất nào hoặc tìm giải pháp tốt hơn, vui lòng báo cáo lại – MattR