无法在 jackson 中为复合键处理 managed/back 引用 'defaultreference'

Can not handle managed/back reference 'defaultreference' in jackson for composite key

最近我遇到了这个错误,

can not handle managed/back reference 'defaultreference' in jackson for composite key

我在谷歌上搜索了很多,但找到了下面的选项,

JsonManagedReference and 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;
 }

如您所见,在子 class 中它有一个复合键。我无法更改它,因为它与 DB 有关系。

谁能帮我解决这个问题?

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

更新 1:

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

JaVers runtime error - diff for Set of ValueObjects is not supported

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

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

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

已在父级中删除 @JsonManagedReference

在 Child 的 Id 对象中的 Parent 对象中添加 @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;
}