I';我使用SpringMVC和JSON来完成一些任务,而我';我有个例外

I';我使用SpringMVC和JSON来完成一些任务,而我';我有个例外,json,spring,hibernate,jpa,persist,Json,Spring,Hibernate,Jpa,Persist,我已经搜索了三天,我的错误仍然存在,我尝试了很多解决方案,但没有任何积极的结果 我有很多关系,下面是我的JPA映射: @实体 公共类Facteur实现了可序列化{ /** * */ private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long idF; @Id @GeneratedValue(strategy=Generati

我已经搜索了三天,我的错误仍然存在,我尝试了很多解决方案,但没有任何积极的结果

我有很多关系,下面是我的JPA映射:

@实体 公共类Facteur实现了可序列化{

/**
 * 
 */
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long idF;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int idT;

....
@ManyToMany(mappedBy="tournees")
@LazyCollection(LazyCollectionOption.FALSE)
private List<Facteur> facteurs;

JQuery代码是:

$(document).ready(function() {
        $(".updatelink").click(function() {
            var facteurId = $(this).data("facteur-id");
            $.ajax({
                type : "GET",
                url : "http://localhost:8080/distribution/facteur/getFacteur/",
                data : { id : facteurId },
                success : function(data) {
                            alert('SUCCESSS');
                            },
                error : function(){
                            alert("ERROR");
                }
            });
        });
    });
有什么解决办法吗


致以最诚挚的问候!

您遇到了stackoverflow错误,因为Facteur类引用了Tournes,而Tournes在JSON序列化时又引用了Facteur-循环引用。

只需将
@JsonIgnore
注释添加到
私有列表tournees;
声明在
Facteur
类中,您就可以了。

您遇到了堆栈溢出错误,因为Facteur类引用了tournees,而tournees在JSON序列化时又引用了Facteur-循环引用。

只需将
@JsonIgnore
注释添加到
private List tournees;
声明在
Facteur
类中,您就可以了。

为了避免导致堆栈溢出错误的无限循环,不应该序列化关系的两边之一。您可以使用
@JsonManagedReference
@JsonBackReference
为避免错误:

//class Facteur
@ManyToMany
@LazyCollection(LazyCollectionOption.FALSE)
@JoinTable(name="Affectation",joinColumns=@JoinColumn(name="IdF"), inverseJoinColumns=@JoinColumn(name="idT"))
@JsonManagedReference
private List<Tournee> tournees;
//类事实
@许多
@LazyCollection(LazyCollectionOption.FALSE)
@JoinTable(name=“Affectation”,joinColumns=@JoinColumn(name=“IdF”),inverseJoinColumns=@JoinColumn(name=“idT”))
@JsonManagedReference
私人名单旅游;
//类Tournee
@许多(mappedBy=“tournees”)
@LazyCollection(LazyCollectionOption.FALSE)
@JsonBackReference
私人名单制造者;

@JsonManagedReference
添加到要序列化的关系的前向部分,并将
@JsonBackReference
添加到不序列化的关系的后向部分。事实上,如果将Tournee实例序列化为JSON,则将获取Facteur数组实例缺点是,只需使用简单的
@JsonIgnore
,但请记住,因此在序列化过程中会忽略getter和setter。

为了避免导致堆栈溢出错误的无限循环,不应序列化关系的两个方面之一。您可以使用
@JsonManagedReference
@JsonBackReference
为避免错误:

//class Facteur
@ManyToMany
@LazyCollection(LazyCollectionOption.FALSE)
@JoinTable(name="Affectation",joinColumns=@JoinColumn(name="IdF"), inverseJoinColumns=@JoinColumn(name="idT"))
@JsonManagedReference
private List<Tournee> tournees;
//类事实
@许多
@LazyCollection(LazyCollectionOption.FALSE)
@JoinTable(name=“Affectation”,joinColumns=@JoinColumn(name=“IdF”),inverseJoinColumns=@JoinColumn(name=“idT”))
@JsonManagedReference
私人名单旅游;
//类Tournee
@许多(mappedBy=“tournees”)
@LazyCollection(LazyCollectionOption.FALSE)
@JsonBackReference
私人名单制造者;

@JsonManagedReference
添加到要序列化的关系的前向部分,并将
@JsonBackReference
添加到不序列化的关系的后向部分。事实上,如果将Tournee实例序列化为JSON,则将获取Facteur数组实例缺点是,只需使用简单的
@JsonIgnore
,但请记住,因此在序列化过程中会忽略getter和setter。

GRAVE:Servlet.service()for Servlet[appServlet]在具有路径[/distribution]的上下文中引发异常[请求处理失败;嵌套异常为org.springframework.http.converter.HttpMessageNotWritableException:无法写入JSON:无限递归(StackOverflowerError)(通过引用链:org.hibernate.collection.PersistentBag[0]->ma.pm.distribution.entities.Tournee[“facturers”]->org.hibernate.collection.PersistentBag[0]->ma.pm.distribution.entities.Facteur[“tournees”]-GRAVE:Servlet.service()用于路径为[/distribution]的上下文中的Servlet[appServlet]引发异常[请求处理失败;嵌套异常为org.springframework.http.converter.HttpMessageNotWritableException:无法写入JSON:无限递归(StackOverflowerr)(通过引用链:org.hibernate.collection.PersistentBag[0]->ma.pm.distribution.entities.Tournee[“facters”]->org.hibernate.collection.PersistentBag[0]->ma.pm.distribution.entities.Facteur[“tournes”]-谢谢你的回答,我已经试过了,但它并不能解决我的问题!!有趣的是,你用什么库来进行json序列化..比如jackson/gson等..并在问题中发布完整的堆栈跟踪经过很多测试后它工作了,非常感谢你,我用了你说的感谢你的回答,我已经试过了,它已经成功了oesn不能帮我解决这个问题!!有趣的是,你用什么库来进行json序列化..比如jackson/gson等..并在问题中发布完整的堆栈跟踪经过大量测试后,它工作正常,非常感谢你,我已经使用了你说的,我必须同时使用你描述的三个注释?因为我已经完成了JsonManagedReference JsonBackReference但没有任何结果!!是的,您可以同时使用上面提到的注释。请查看此注释以了解更多信息。您想说我必须同时使用您描述的三个注释吗?因为我已经完成了JsonManagedReference JsonBackReference,但没有任何注释esults!!是的,您可以同时使用上面提到的注释。有关详细信息,请查看此注释。
//class Facteur
@ManyToMany
@LazyCollection(LazyCollectionOption.FALSE)
@JoinTable(name="Affectation",joinColumns=@JoinColumn(name="IdF"), inverseJoinColumns=@JoinColumn(name="idT"))
@JsonManagedReference
private List<Tournee> tournees;
//class Tournee
@ManyToMany(mappedBy="tournees")
@LazyCollection(LazyCollectionOption.FALSE)
@JsonBackReference
private List<Facteur> facteurs;