Это для REST API, так как это связано с упрощением использования JSON POST. У меня есть две сущности, Клиент и Роль. Для простоты:
Customer: Long id, String name, List<Role>
Role: Long id, String name -- this is a static system table I populate i.e. "User", "Admin"
Внутренне я делаю целые отношения многие ко многим, но я не хочу показывать role.ids в json, поэтому я делаю обертку скарта, в которой я получаю:
"роли": ["Пользователь", "Администратор"]
Пока все хорошо. GET работают точно так, как я хочу.
Теперь я пытаюсь реализовать POST. В этом случае мне нужно взять массив «role» и преобразовать его обратно во внутренний список.
Я могу сделать это с помощью:
this.roles = roles.stream().map(role -> { return new Role(0L, role); })
.collect(Collectors.toList());
Это также отлично работает. За исключением roleId все 0 очевидно. Моя идея состояла в том, чтобы создать RoleRepository и автоматически связать его внутри сущности Customer, чтобы я мог запросить таблицу ролей по имени, чтобы получить идентификатор. Но это приводит к возникновению исключения, так как он не может создать объект RoleRepository внутри Customer, который находится в CustomerRepository.
Попытка выяснить, как заполнять здесь roleIds. В качестве дополнительного вопроса:
У меня есть CustomerController. Это просто перенаправляет запрос на создание в CustomerService. Если я автоматически подключаю RoleRepository в CustomerService, он работает нормально, но я не думаю, что сервисы обязаны заполнять идентификаторы, не так ли? Кажется, что Customer должен заполнить их, когда вызывается setRoles (), нет? В противном случае объект Customer будет удерживать недопустимое состояние до тех пор, пока он не будет сохранен, тогда как, если я сделаю это для клиента, он всегда будет в допустимом состоянии.