1

最近我遇到了这个错误,

无法在杰克逊中处理复合键的托管/反向引用“defaultreference”

我用谷歌搜索了很多,但发现以下选项可以使用,

JsonManagedReference 和 JsonBackReference

参考

但我的情况是,

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 有关系。

有人可以帮我解决这个问题吗?

注意:我正在使用 Jackson 2.4.3 我正在使用 Javers 1.2.9 进行对象比较

更新1:

根据建议,我删除了 JsonManaged 和 JsonBack 引用注释,并将 JsonIgnore 添加到 childId 类中的 Parent 属性。但是我在 Javers 上遇到了错误,

JaVers 运行时错误 - 不支持 Set of ValueObjects 的差异

4

2 回答 2

6

问题已解决。最奇怪的解决方法.. ;)

@JsonManagedReference在父级中删除。

添加@JsonBackReference在 Child 的 Id 对象中的 Parent 对象。

前任:

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;
}
于 2015-08-24T14:06:34.503 回答
0

您是否在将 JSON 反序列化为 Java 对象时看到此异常?

如果是,我使用的解决方法是 - 1. 从实体中删除 @JsonManagedReference 和 @JsonBackReference。2. @JsonIgnore 父引用(例如,在您的 ChildId 类中)。因此 ChildId 中的父引用在序列化时为空。3. 要反序列化,请将两个单独的实体(子和父)发送回服务。一旦两个对象都可用,我将 Parent 设置回 ChildId 类,这有助于满足循环引用。

于 2015-08-19T17:40:09.993 回答