【问题标题】:How to update a @ManyToOne relationship with Spring Data REST?如何使用 Spring Data REST 更新 @ManyToOne 关系?
【发布时间】:2016-04-17 17:41:07
【问题描述】:

我将 Spring Data REST 与 JPA 一起使用。我有一个 User 实体,它与另一个名为 AccountStatus 的实体存在多对一关系,该实体在单独的 RDBMS 表中建模。 JSON 表示形式如下所示:

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

User实体中的关系是:

@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,但没有成功。

我做错了什么?

【问题讨论】:

标签: spring jpa spring-data spring-data-rest


【解决方案1】:

这真的取决于您是否有AccountState 的导出存储库。如果您这样做,您可以使用 PATCH/users/{id} 更新您的帐户状态:

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

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

【讨论】:

  • 嘿 Mathias,我遇到了同样的问题,但由于各种原因,我们实例中的“accountState”没有被导出。有没有办法在不导出的情况下做到这一点?
  • @pasquers 我不这么认为 - 我认为您必须为更新创建一个自定义控制器并将链接添加到您拥有的资源
猜你喜欢
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
  • 2020-12-03
  • 2020-03-06
  • 2018-01-04
  • 2019-12-25
  • 1970-01-01
  • 2015-06-06
相关资源
最近更新 更多