2016-01-12 3 views
6

JPAでSpring Data RESTを使用します。私は別のRDBMSテーブルでモデル化されたAccountStatusと呼ばれる別のものと多対1の関係を持つUserエンティティを持っています。 JSON表現は次のようになります。今、私は、上/ユーザー/ 123およびペイロードPATCH要求を使用してアカウントステータスを変更しようとSpringデータRESTで@ManyToOne関係を更新するにはどうすればよいですか?

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

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

Userエンティティ関係されています。

{"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を置き換えて成功させようとしました。

私は間違っていますか?

+0

可能な複製を割り当てるリソースを参照するには、アカウントの状態のURIを使用している:修正する方法"XからYに変更されたインスタンスの識別子"?](http://stackoverflow.com/questions/4179166/hibernate-how-to-fix-identifier-of-an-instance-altered-from-x-to- y) – Makoto

+0

@Makoto、私は他の質問が所有エンティティのPKを変更することだと思う、私の問題は、ユーザーとAccountStateの間にカスケードが定義されていない場合の子関係を変更することです。 – florind

答えて

8

AccountStateのエクスポートされたリポジトリがあるかどうかは、実際には依存します。あなたが行う場合は、/users/{id}に対するPATCHでアカウントの状態を更新することができます。

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

だから、[休止状態の

+0

ねえマティアス、私は同じ問題を抱えていますが、私たちのインスタンスの 'accountState'はさまざまな理由でエクスポートされていません。それをエクスポートせずにそれを行う方法はありますか? – pasquers

+0

@pasquers私はそうは思わない - あなたは、更新のカスタムコントローラを作成し、あなたの所有リソースへのリンクを追加する必要があると思う –

+0

誰かがPUTで動作しない理由を説明することができますか? – Toilal

関連する問題