如何更新与Spring Data REST的@ManyToOne关系?

我使用Spring Data REST和JPA。 我有一个用户实体与另一个叫做AccountStatus的多对一关系建模在一个单独的RDBMS表中。 JSON表示如下所示:

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

用户实体中的关系是:

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

现在我尝试使用/ users / 123上的PATCH请求和有效负载来更改帐户状态:

{"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,并取代user.accountStatus而没有成功。

我究竟做错了什么?


这真的取决于你是否有一个导出的AccountState仓库。 如果你这样做,你可以用PATCH/users/{id}更新你的账户状态:

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

因此,您正在使用您帐户状态的URI来引用要分配的资源

链接地址: http://www.djcxy.com/p/89601.html

上一篇: How to update a @ManyToOne relationship with Spring Data REST?

下一篇: Merge detached JPA entity with @version field