【问题标题】:Direct self-reference leading to cycle error with a FetchType.LAZY使用 FetchType.LAZY 导致循环错误的直接自引用
【发布时间】:2021-08-28 07:04:04
【问题描述】:

当我尝试发出请求时,我有一个包含很多 @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 上?

【问题讨论】:

    标签: json spring-boot hibernate fetch many-to-one


    【解决方案1】:

    显然,您正在尝试使用具有循环的 Jackson 将某些内容序列化为 JSON。但这不受支持。我认为 fetch 模式在这里应该没有什么区别,但这绝对是数据问题或配置问题。也许您应该尝试忽略一些您在 JSON 中不需要的多对一关联,方法是使用 @JsonIgnore 注释它们

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-10
      • 1970-01-01
      • 2018-01-24
      • 1970-01-01
      • 2018-11-27
      • 2017-07-27
      • 1970-01-01
      相关资源
      最近更新 更多