如何使用 Spring Data REST 更新 @ManyToOne 关系?
How to update a @ManyToOne relationship with Spring Data REST?
我将 Spring 数据 REST 与 JPA 结合使用。我有一个用户实体,它与另一个名为 AccountStatus 的实体存在多对一关系,该实体在单独的 RDBMS table 中建模。 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 来引用要分配的资源
我将 Spring 数据 REST 与 JPA 结合使用。我有一个用户实体,它与另一个名为 AccountStatus 的实体存在多对一关系,该实体在单独的 RDBMS table 中建模。 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 来引用要分配的资源