2015-08-18 26 views
1

最近我得到這個錯誤,無法處理管理/反向引用「defaultreference」在傑克遜的複合鍵

無法處理託管/反向引用「defaultreference」在傑克遜的複合鍵

我GOOGLE了很多,但發現下面的選項,使用,

JsonManagedReference和JsonBackReference

Reference

但是我的情況是,

Class Parent{ 
private int id; 
@JsonManagedReference 
Set<Child> childSet; 
} 

Class Child{ 
private ChildId childId; 
private String name; 
} 

Class ChildId{ 
private int childKey; 
@JsonBackReference 
private Parent parent; 
} 

正如你看到的,在子類中有一個複合鍵。我無法改變這個,因爲它與DB有關係。

有人可以幫我解決這個問題嗎?

注: 我使用傑克遜2.4.3 我使用Javers 1.2.9對象比較

UPDATE1:

按照建議,我已刪除JsonManaged和JsonBack參考註釋和在childId類中將JsonIgnore添加到Parent屬性。 但即時得到下面Javers錯誤,

JaVers運行時錯誤 - DIFF爲集ValueObjects的是不支持

+0

傢伙...任何建議PLZ? – Lathy

+0

Plz在這幫我 – Lathy

回答

4

問題已解決。 最奇怪的解決方法..;)

刪除@JsonManagedReference在父。

在父對象,它是在孩子的ID對象添加@JsonBackReference

例:

Class Parent{ 
    private int id; 
    Set<Child> childSet; 
} 

Class Child{ 
    private ChildId childId; 
    private String name; 
} 

Class ChildId{ 
    private int childKey; 
    @JsonBackReference 
    private Parent parent; 
} 
+0

只有工作的解決方案,我發現有用 – swapyonubuntu

+0

謝謝Swapyonubuntu .. – Lathy

+0

非常感謝,搜索整個網絡,這是唯一的解決辦法! – rfsbsb

0

你看到的JSON反序列化到Java對象此異常?

如果是,我使用的解決方法是 - 1.從實體中刪除@JsonManagedReference和@JsonBackReference。 2. @JsonIgnore父引用(對於你的ChildId類中的ex)。因此,在序列化時,ChildId中的父引用爲null。 3.要反序列化,請將兩個單獨的實體(Child和Parent)發送回服務。一旦這兩個對象都可用,我將Parent設置回到有助於滿足循環引用的ChildId類中。

+0

嗨Kamlesh,非常感謝你的回覆。經過修改後,我得到了錯誤, 11:39:59,712錯誤SetChangeAppender:46 - 無法比較字段集 Child1; //聲明在:Parent,JaVers運行時錯誤 - 不支持Value對象集的差異 – Lathy

+0

那麼你正在做手動什麼註釋可以自動爲你做:) – Jon

相關問題