无法在jackson中处理复合键的托管/后向引用'defaultreference'

时间:2015-08-18 10:40:35

标签: java jackson javers

最近我收到了这个错误,

  

无法在jackson中处理复合键的托管/后向引用'defaultreference'

我用googled很多,但找到了以下选项,

  

JsonManagedReference和JsonBackReference

Reference

但我的情况是,

grid

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

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

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

UPDATE1:

根据建议,我删除了JsonManaged和JsonBack引用注释,并在childId Class中将JsonIgnore添加到Parent属性。 但我对Javers的误差低于此,

  

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

2 个答案:

答案 0 :(得分:5)

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

在Parent中删除了@JsonManagedReference

在Child对象中添加@JsonBackReference,该对象位于Child的Id对象中。

例如:

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

答案 1 :(得分:0)

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

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