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
私有列表@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
指定一个唯一、合理的名称即可。你解决了吗?