witam, mam problem, a polega on na tym że nie wiem czy dobrze to robie pod względem rozplanowania itd.:
mam relacje one-to-many w bazie danych. Są ludzie i każdy człowiek ma ileś książek. (Ludzie 1) - (N Książki), i książki trzymają id ludzi.
Teraz przy pokazywaniu ludzi na stronie, chcę także pokazać ile każdy człowiek ma książek. Jakieś ogólne wskazówki jak to zrobić?
Obecnie robie to tak:
- w PersonService fetchuje ludzi,
List<Person> people = personService.getPeople();
- potem zmieniam ludzi na PersonDTO ktore są wyposażone w pole "ilośćKsiążek", czyli
List<PersonDTO> peopleDTO= conver.convertToDto(people) [ i zmieniam wszystko na dto wyposażone w dodatkowe pole]
- potem robię mape i sprawiam żeby każdy z tych peopleDTO wywołał akcje repozytorium booksDao.getBooksCountForPersonId(personId) i pobrał ilośc książek dla danej osoby
query HQL wykonywane przez booksDao.getBooksCountForPersonId(personId) wygląda tak : select count(*) from Book where person_id=:person_id
List<PersonDTO> peopleWithBooksCount = peopleDTO.stream().peek(e -> e.setBooksCount(booksDao.getBooksCountForPersonId(elm.getId()))).collect(Collectors.toList());
- Zwracam do kontrollera rest to dto i wysyłam json
I teraz pytanie: czy to jest w ogóle dobre rozwiązanie? najpierw pobieram całą liste, potem zmieniam ją na dto a potem jeszcze raz mapuje wszystko pobierając z serwisu dane, to tak powinno wyglądać?