JPA比較新,所以我有一種建築問題。 比方說,我有表EMPLOYEE和DEPARTMENT與多對一的關係(即很多員工一個部門工作):JPA - 計算列作爲實體類屬性?
EMPLOYEE
EMPLOYEE_ID
EMPLOYEE_NAME
DEPARTMENT_ID
DEPARTMENT
DEPARTMENT_ID
DEPARTMENT_NAME
所以我可以定義爲員工和部門適當的實體,沒有任何問題。然而,在一個視圖中,我想這樣的與該部門工作的員工人數,東西顯示部門的列表:
SELECT D.DEPARTMENT_NAME,
(SELECT COUNT(*) FROM EMPLOYEE E WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID) NUMBER_OF_EMPLOYEES
FROM DEPARTMENT D
我只是不知道什麼是實現這個使用JPA是正確的策略。 .. 我不想總是爲部門實體提取員工數量,因爲只有一個視圖是需要的。
它看起來像Hibernate的@Formula將是一種可能的方法,但afaik它不符合JPA標準。
謝謝@MattR的回答。此解決方案可能適用於此簡單示例。但是,如果(a)DEPARTMENT表除NAME之外還有許多其他列,我顯然不想在構造函數中列出所有這些列,並且(b)我仍然希望將其作爲Department實體的屬性(使用LAZY獲取類型)可以在其他地方訪問以防萬一。 – AndreiM 2012-07-10 00:08:19
好問題,我沒有嘗試過,但我認爲*你可以在構造函數中使用實體類(所以你不需要選擇所有的實體屬性)。如果我有機會嘗試它,我會更新我的答案......也就是說您可以有一個DepartmentEmployees類(比如說),它具有一個構造函數DepartmentEmployees(Department,Integer)並使用SELECT new DepartmentEmployees(D,count(E.id )) - 不完全是你要求的,但更接近... – MattR 2012-07-10 00:22:05
好吧,我正在考慮這個午餐,所以更新了一些額外的信息。如果您嘗試任何建議或找到更好的解決方案,請回報 – MattR 2012-07-10 04:46:48