2017-09-06 56 views
1

我有3個這樣的表格A ---- * B * ----- C(*很多,所以從A到B和B-C是雙向的,B上有許多,星號表示很多)。關於雙向關係的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; 

我第一次retrive JSON對象,它被檢索OK,我已經消除了循環依賴,但後來我想插入我的數據庫中檢索的JSON,在DB,其中對象不存在。所以我試着直接保存A,aRepository.save(A),但是我得到一個C對象不存在的錯誤。 在這種情況下我應該如何保存,我是否應該在C中引用B中的json文件?如果是,如何?

編輯:刪除B和C之間的雙向關係,仍然無法正常工作。

+0

JSON表示來自瀏覽器的數據。發送JSON結構,最好地描述API預期的輸入內容。不要發送來自持久實體的JSON,這是完全不同的事情。然後,從這個JSON中,通過編寫適當的代碼來創建/更新實體。 –

回答

1

插入到數據庫需要一些操縱你的JSON,因爲你正在處理雙向關係,參見雙向關係每邊應該有一個對另一邊的引用,這不能完全在JSON中完成,因爲我們沒有處理參考所以如果你有JSON這樣

A {

B [{A:{}}]

你不能告訴既是一個是相同的。

所以你真正需要做的是從你的JSON中檢索對象,並注入關係的每一邊,然後堅持它們。