REST и JPA, форма редактирования нескольких сущностей
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 06.06.18 04:44
Оценка:
Есть ли какой-то устоявшийся подход к использованию JPA в таком контексте?
* На UI есть какая-то форма, в которой оператор редактирует ну например информацию о водителе и его автомашинах (которых может быть несколько).
* Эта форма одним запросом посылается на бэкэнд, у которого водитель это одна сущность, а автомашина — другая, и бэк соответственно присланный запрос превращает в изменения множества сущностей.

Я тут буду исходить из того что автомашины сами по себе никого не интересуют и являются лишь частью информации о водителе. Это обычно не так, но для примера сойдет.
Вот какие варианты я себе представляю.
1. Форма посылается как список изменений, то есть UI трекает какие действия оператора добавляли новые машины, какие удаляли имеющиеся, какие изменяли имеющиеся. Присылает этот список изменений бэку (тут вопрос как идентифицировать ранее существовавшие сущности, скорее всего при показе формы фронт взял у бэка их идентификаторы и теперь их пошлет обратно). В этом варианте клиент явно сообщает беку, с какой сущностью что делать.
2. Форма посылается как итоговая версия данных — например какой-то JSON, состоящий из водителя, в которого вложена его коллекции машин. При этом бэк проходит по коллекции, и если для сущности указан id — то обновляет ее, если не указан — создает новую, если же какого-то id нет и в БД сейчас такая машина связана с водителем — удаляет ее.
3. Аналогично предыдущему, но вместо прохода вручную по присланному списку объектов и определения того, что нужно сделать с каждой сущностью, присланный JSON превращается в граф создаваемых через new (или десериализуемых из JSON даже) сущностей, некоторые из которых имеют идентификаторы. Например создается новый Driver и у него коллекция Vehicles, в которой создается new Vehicle для каждой перечисленной в JSON машины. Затем используется em.merge к этому Driver, и он, считая эти сущности detached, сам определяет, какие операции нужно выполнить.

Мой вопрос пока даже не о том что из этого правильно или неправильно.
Мне интересно кто как делает из людей, кто уже давно с JPA работает.

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.