【问题标题】:Can not handle managed/back reference 'defaultreference' in jackson for composite key无法在杰克逊中处理复合键的托管/反向引用“defaultreference”
【发布时间】:2016-02-04 06:21:13
【问题描述】:

最近遇到这个错误,

无法在 jackson 中为复合键处理托管/反向引用“defaultreference”

我用谷歌搜索了很多,但找到了以下选项,

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 进行对象比较

更新1:

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

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

【问题讨论】:

  • 各位...有什么建议吗?

标签: java jackson javers


【解决方案1】:

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

已删除父级中的 @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;
}

【讨论】:

  • 非常感谢,搜索了整个网络,这是唯一有效的答案!
  • 欢迎您@rfsbsb
【解决方案2】:

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

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

【讨论】:

  • 嗨,Kamlesh,非常感谢您的回复。修改后我得到以下错误,11:39:59,712 ERROR SetChangeAppender:46 - could not diff Field Set Child1; //声明于:Parent,JaVers 运行时错误 - 不支持 Set of ValueObjects 的差异
  • 嗯,你正在手动做注释可以为你自动做的事情:)
猜你喜欢
  • 2016-09-18
  • 2013-12-05
  • 2017-11-13
  • 2017-11-26
  • 2018-10-08
  • 2015-03-26
  • 1970-01-01
  • 2012-09-13
  • 2023-03-27
相关资源
最近更新 更多