使用 FetchType.LAZY

问题描述

当我尝试提出请求时,我有一个包含很多 @ManyToOne 的模型,我有一个递归的 Json。

所以,我像这样放了一些 FetchType.EAGER 并且它有效:

@ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "comp_doc",referencedColumnName = "comp_doc")
    public CompDoc  getCompDoc() {
        return CompDoc;
    }

但是对于几个请求,我不需要所有的@ManyToOne。所以我尝试将 FetchType 更改为 LAZY,如下所示:

@ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "comp_doc",referencedColumnName = "comp_doc")
        public CompDoc  getCompDoc() {
            return CompDoc;
        }

此时,如果我不需要@ManyToOne 中的数据,通常会将它们从 Json 中排除。

但不是这个(这是我的目标),我现在有一个错误

直接自引用导致循环(通过引用链: java.util.ArrayList[6021]->org.test.test.model.Document["documentByDocId"]

为什么这个错误出现在 LAZY 而不是 EAGER?

解决方法

显然,您正在尝试使用具有循环的 Jackson 将某些内容序列化为 JSON。但这不受支持。我认为获取模式在这里应该没有区别,但这绝对是数据问题或配置问题。也许您应该尝试通过使用 @JsonIgnore

注释来忽略一些您在 JSON 中不需要的多对一关联