2017-09-06 31 views
1

私はこのような3つのテーブルを持っています。A ---- * B * ----- C(*は多く、AからBとB-Cへの双方向です。星は多くを示します)。JPA双方向関係の循環参照

A: 
@OneToMany(mappedBy = "A") 
private List<B> bList; 

B: 
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") 
@JsonIdentityReference(alwaysAsId=true) 
@ManyToOne 
private A; 

@ManyToOne 
private C; 

C: 
@JsonIgnore 
@OneToMany(mappedBy = "C") 
private List<B> bList; 

Iは、第JSONオブジェクトをretrive、それがOK取得され、Iは、循環依存を排除​​したが、その後私は、オブジェクトが存在しないDBに、DBで検索JSONを挿入します。だから私は直接aRepository.save(A)を保存しようとしますが、Cオブジェクトが存在しないというエラーが出ます。 この場合、どのように保存することができますか?BのC参照のjsonファイルにも入力する必要がありますか?そしてもしそうなら、どうですか?

EDIT:BとCの間の双方向の関係は削除されていますが、まだ動作していません。

+0

JSONはブラウザからのデータを表します。 APIが入力として期待していることを最小限に説明するJSON構造を送信します。永続エンティティから派生したJSONを送信しないでください。これはまったく別のものです。次に、このJSONから、適切なコードを記述してエンティティを作成/更新します。 –

答えて

1

双方向関係を扱っているので、データベースへの挿入には、双方向関係を扱っているため、jsonを操作する必要があります。双方向関係で、それぞれの側が参照する必要があります。参照を扱っていないため、あなたはこの

A {

B [{A:{}}]のようなJSONを持っている場合はそう

あなたは、両方のAを伝えることはできません同じです。

あなたが本当に必要とするのは、あなたのjsonからオブジェクトを取得し、関係の各側をもう一方の側に注入して永続させることです。