Stosunkowo nowy w JPA, więc mam jedno pytanie architektoniczne. Powiedzmy mam tabele pracownika i handlowy z wielu do jednej relacji (tj wielu pracowników pracuje dla jednego działu):JPA - obliczona kolumna jako własność klasy encji?
EMPLOYEE
EMPLOYEE_ID
EMPLOYEE_NAME
DEPARTMENT_ID
DEPARTMENT
DEPARTMENT_ID
DEPARTMENT_NAME
Więc mogę określić odpowiednie podmioty dla pracownika i Zakładu, to nie ma problemu. Jednak w jednym widoku Chciałbym wyświetlić listę działów z liczbą pracowników zatrudnionych w tym dziale, coś takiego:
SELECT D.DEPARTMENT_NAME,
(SELECT COUNT(*) FROM EMPLOYEE E WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID) NUMBER_OF_EMPLOYEES
FROM DEPARTMENT D
prostu nie jestem pewien, co jest właściwą strategią, aby osiągnąć to za pomocą JPA. .. Nie chcę zawsze pobierać liczby pracowników w dziale Oddział, ponieważ jest tam tylko jeden widok, gdy jest potrzebny.
Wygląda na to, że Hibernate @Formula będzie jednym z możliwych podejść, ale afaik nie jest zgodny ze standardem JPA.
Dziękuję @MattR za odpowiedź. To rozwiązanie może działać dla tego prostego przykładu. Ale co jeśli (a) tabela DEPARTMENT ma wiele innych kolumn oprócz NAME i oczywiście nie chcę ich wszystkich wymienić w konstruktorze i (b) nadal chcę mieć to jako własność jednostki działu (z LAZY Fetch type), aby była dostępna gdzie indziej na wszelki wypadek. – AndreiM
Dobre pytanie, nie próbowałem go, ale * myślę, że * możesz użyć klas jednostek w konstruktorze (abyś nie musiał wybierać wszystkich właściwości encji). Jeśli dostanę szansę, aby to wypróbować, zaktualizuję moją odpowiedź, tzn. Że możesz mieć klasę Pracowników działu (powiedzmy), która miała konstruktor działu Pracownicy (Dział, Integer) i użyć SELECT nowych pracowników działu (D, count (E.id))) - nie do końca to, o co prosisz, ale bliżej ... – MattR
OK Myślałem o tym podczas obiadu, więc zaktualizowałem kilka dodatkowych informacji. Jeśli wypróbujesz którąkolwiek z sugestii lub znajdziesz lepsze rozwiązanie, zgłoś ponownie: – MattR