Java 名称为';默认参考';

Java 名称为';默认参考';,java,json,spring,jackson,Java,Json,Spring,Jackson,我在一个类中有多个反向引用类。因为我对它们使用了@JsonBackReference,所以我得到了一个错误。我为这些类分配了@JsonIdentityInfo注释,但仍然得到相同的错误 public class X implements Serializable { .... //bi-directional many-to-one association to Booking @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(nam

我在一个类中有多个反向引用类。因为我对它们使用了
@JsonBackReference
,所以我得到了一个错误。我为这些类分配了
@JsonIdentityInfo
注释,但仍然得到相同的错误

public class X implements Serializable {
  ....
  //bi-directional many-to-one association to Booking
  @ManyToOne(fetch = FetchType.EAGER)
  @JoinColumn(name = "xxA", nullable = false)
  @JsonBackReference
  private A a;

  //bi-directional many-to-one association to Client
  @ManyToOne(fetch = FetchType.EAGER)
  @JoinColumn(name = "xxB", nullable = false)
  @JsonBackReference
  private B b;
  ...getters setters
}

@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@id")
public class B implements Serializable {
  ........ 
  //bi-directional many-to-one association to BookedClient
  @OneToMany(mappedBy = "b", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
  @JsonManagedReference
  private List < X > xxB;
  ........ getters setters
}


@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@id")
public class A implements Serializable {
  ........
  //bi-directional many-to-one association to BookedClient
  @OneToMany(mappedBy = "a", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
  @JsonManagedReference
  private List < X > xxA;
  ........ getters setters
}
公共类X实现了可序列化{ .... //双向多对一关联预订 @manytone(fetch=FetchType.EAGER) @JoinColumn(name=“xxA”,null=false) @JsonBackReference 私人A; //与客户端的双向多对一关联 @manytone(fetch=FetchType.EAGER) @JoinColumn(name=“xxB”,null=false) @JsonBackReference 私人B,; …接球手和二传手 } @JsonIdentityInfo(generator=ObjectiveGenerators.IntSequenceGenerator.class,属性=“@id”) 公共类B实现可序列化{ ........ //与BookedClient的双向多对一关联 @OneToMany(mappedBy=“b”,fetch=FetchType.EAGER,cascade=CascadeType.ALL) @JsonManagedReference 私有列表xxB; ……接受者和接受者 } @JsonIdentityInfo(generator=ObjectiveGenerators.IntSequenceGenerator.class,属性=“@id”) 公共类A实现可序列化{ ........ //与BookedClient的双向多对一关联 @OneToMany(mappedBy=“a”,fetch=FetchType.EAGER,cascade=CascadeType.ALL) @JsonManagedReference 私有列表xxA; ……接受者和接受者 } 错误:

com.fasterxml.jackson.databind.JsonMappingException:名为“defaultReference”的多个反向引用属性

如何解决此错误?我不能在一个类中使用多个反向引用吗

根据,
@JsonManagedReference
@JsonBackReference
都接受将它们绑定在一起的名称值:

  @JsonBackReference("a")
  private A a;

  @JsonManagedReference("a")
  private List < X > xxA;
@JsonBackReference(“a”)
私人A;
@JsonManagedReference(“a”)
私有列表xxA;

我也遇到了这个问题,但最后我解决了它

//This is parent class
@Entity
@Table(name = "checklist")
@JsonIgnoreProperties("inspection")
public class Checklist implements java.io.Serializable {

    @ManyToOne
    @JoinColumn(name = "product_id", referencedColumnName = "id")
    @JsonBackReference
    private Product product;

    @OneToMany(mappedBy = "checklists", cascade = CascadeType.ALL)
    @JsonManagedReference
    private Set<Inspection> inspection = new HashSet<Inspection>();
//Constructor
//Getter and Setter
}

//This is child class
@Entity
@Table(name = "inspections")
public class Inspection {

    @ManyToOne
    @JoinColumn(name = "chk_id", referencedColumnName = "id")
    private Checklist checklists;
//Constructor
//Getter and Setter
}
//这是父类
@实体
@表(name=“检查表”)
@JsonIgnoreProperties(“检查”)
公共类清单实现java.io.Serializable{
@许多酮
@JoinColumn(name=“product\u id”,referencedColumnName=“id”)
@JsonBackReference
私人产品;
@OneToMany(mappedBy=“checklist”,cascade=CascadeType.ALL)
@JsonManagedReference
私有集检查=新HashSet();
//建造师
//接二连三
}
//这是儿童班
@实体
@表(name=“检查”)
公开课检查{
@许多酮
@JoinColumn(name=“chk\u id”,referencedColumnName=“id”)
私人清单;
//建造师
//接二连三
}
通过在父类中提到
@JsonIgnoreProperties(“检查”)
@JsonManagedReference


解决了在同一父类中使用两个
@jsonbackreference
所引起的问题。

所以这确实花了我一段时间

您可以使用
@jsonidentialreference(alwaysAsId=true)
相应地注释您的引用,然后将其保留在主引用之外

    @JsonIdentityReference(alwaysAsId = true)
    private Set<PackInstructionGroup> groups = new TreeSet<>();
@jsonidentialreference(alwaysAsId=true)
私有集组=新树集();

我为每个关系添加了一个名称值。我仍然收到相同的错误。是的,我还尝试了
@JsonManagedReference(value=“a”)
@JsonBackReference(value=“a”)
,但仍然收到相同的错误我收到了此错误:
java.lang.IllegalArgumentException:无法处理托管/反向引用“a”:反向引用类型(java.util.List)与托管类型(a)不兼容
@Eniss您必须使用唯一的名称命名所有后台/托管引用,因为它们可能与项目中的其他引用冲突。只需给每对
@JasonBackReference
~
@JasoManagedReference
指定一个唯一、合理的名称即可。你解决了吗?