Здравствуйте, Slicer [Mirkwood], Вы писали:
SM>Мне интересно кто как делает из людей, кто уже давно с JPA работает.
Привет. Мы делаем примерно так
— допустим есть некий rest api который отдает и принимает для обновления водителя и его автомобили в формате json
— есть слой сущностей модели который мапятся на базу. Будем называть их entity
— есть слой сущностей модели, которые мапятся на json. Будем называть их view object (или сокращенно vo)
очень часто vo-шки очень похож на entity, но могут и немного отличаться. Например могут содержать меньше полей, если для представления эти поля не нужны.
Допустим теперь пришел запрос на сохранение водителя.
— в контроллере json автоматически мапится на vo-шки, так что в приложении уже можем работать с объектами.
К слову в spring, мапинг сущностей на json и обратно делается автоматически.
Контроллер также может выполнять базовые валидации, например чтобы поле было not null и тд.
Далее
— контроллер вызывает сервис, и передает туда vo.
— в сервисе: мапим эти vo-шки на entity (вручную или используя высокоуровневые мапперы вроде: dozer или java-object-merger).
— мержим с уже существующими в базе. Соответсвие между сущностями находим по id-шникам.
В сервисе может быть более сложная безнес валидация. Если, что не так — кидаем исключение,
которое потом перехватывается в глобальном интерсепторе исключений и преобразуется в соответсвующий
ответ клиенту.
— далее вызываем методы entity manager-а чтобы сохранить изменения (persist, merge).