Как обновить отношения @ManyToOne с Spring Data REST?

Я использую Spring Data REST с JPA. У меня есть пользовательская сущность, которая имеет отношение "много к одному" с другим, называемым AccountStatus, смоделированным в отдельной таблице СУБД. Представление JSON выглядит следующим образом:

{
   "id": "123"
   "username": "user1",
   "accountStatus": {
     "id": "1",
     "status": "Active"
   }
}

отношение в сущности пользователя:

@ManyToOne(optional = false)
@JoinColumn(name = "account_state")
@Getter @Setter private AccountState accountState;

теперь я пытаюсь изменить статус учетной записи, используя запрос исправления на /users / 123 и полезную нагрузку:

{"accountState":{"id":0}}

но я получаю сообщение об ошибке:

 "identifier of an instance of com.domain.account.AccountState was
  altered from 1 to 0; nested exception is org.hibernate.HibernateException:
  identifier of an instance of com.domain.account.AccountState was
 altered from 1 to 0"

Я также пытался использовать @HandleBeforeSave / @HandleBeforeLinkSave для извлечения нового AccountState из репозитория и замены пользователя.accountStatus без успеха.

что я делаю не так?

1 ответов


это действительно зависит от того, есть ли у вас экспортированный репозиторий для AccountState. Если вы это сделаете, вы можете обновить состояние своей учетной записи с помощью PATCH против /users/{id}:

{
    "accountState": "http://localhost:8080/accountStates/2"
}

таким образом, вы используете URI своего состояния учетной записи для ссылки на ресурс для назначения