当前位置: 首页 > 知识库问答 >
问题:

在Hibernate状态下使用@JsonIgnore的 Json 解析错误

简滨海
2023-03-14

当Jackson试图将我的数据解析为Json时,我遇到了这个异常:

org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: failed to lazily initialize a collection of role: packagename.Thing.Stuffs, could not initialize proxy - no Session (through reference chain: java.util.ArrayList[0]->packagename.Stuff[“thing"]->packagename.Thing[“stuffs"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: failed to lazily initialize a collection of role: packagename.Thing.Stuffs, could not initialize proxy - no Session (through reference chain: java.util.ArrayList[0]->packagename.Stuff[“thing"]->packagename.Thing[“stuffs"])

我有以下实体(名字已经用Stuff和Thing代替):

材料:

@Entity
@Table(name = "stuff")
@SQLDelete(sql = "UPDATE stuff SET deleted = 1 WHERE id = ?")
@Where(clause = "deleted = 0")
public class Stuff implements Serializable {

    private Long id;
    private Thing thing;
    private String stuffName;

    @Id
    @Column(name = "id", unique = true, nullable = false)
    @GeneratedValue
    public Long getId() {
        return this.id;
    }

    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, optional = false)
    @JoinColumn(name = "thing_id", nullable = false)
    public Thing getThing() {
        return thing;
    }  

    @Transient
    public String getStuffName() {
        return stuffName;
    }

    // Setters and constructor(s) omitted

}

东西:

@Entity
@Table(name = "thing")
public class Thing implements Serializable {

    private Long id;
    private String name;
    private List<Stuff> stuffs;


    @Id
    @Column(name = "id", unique = true, nullable = false)
    @GeneratedValue
    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Column(name = "name", unique = false, nullable = false, length = 45)
    public String getName() {
        return this.name;
    }

    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "thing_id")
    @JsonIgnore
    public List<Stuffs> getStuffs() {
        return stuffs;
    }


    // Setters and constructor(s) omitted
}

我一直在搜索这种错误。当json解析器试图解析由于延迟加载而未加载的对象时,似乎会发生这种情况。默认情况下,延迟加载似乎处于打开状态。我想避免将所有内容设置为“渴望”,所以我改为使用@JsonIgnore。这对我来说没有任何改变。如果能得到帮助,我将不胜感激,这让我发疯。

编辑:

在两个类中都添加@JsonIgnore和@Eager给了我另一个问题。一个看起来像这样的异常:

org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.doResolveException Handling of [org.springframework.http.converter.HttpMessageNotWritableException] resulted in Exception java.lang.IllegalStateException: Cannot call sendError() after the response has been committed

在stackoverflow上搜索它会得到以下结果:Hibernate和Jackson(java.lang.IllegalStateException:在提交响应后无法调用sendError()

链接基本上是说我应该添加@JsonIgnore,我已经这样做了。

共有2个答案

戚兴邦
2023-03-14

也许您的问题是由错误的映射引起的,您不应该在Thing实体中使用@OneTo众多关系的@JoinCol列,您需要添加mep dBy="Things"作为参数来正确指定关系。

车子平
2023-03-14

从您的评论中可以看出,您正在使用Jackson 1.9.10,这将允许您通过为访问类型添加只读只写属性来使用@JsonPropertyannotation的新语法。

所以你可以使用:

@JsonProperty(access = Access.WRITE_ONLY)

使用字段定义。

有关更多详细信息,可以选中“在序列化期间仅使用@JsonIgnore,但不能进行反序列化讨论。

注意:

对于旧版本,您可以只对类成员getter使用< code>@JsonIgnore,对其setter使用< code>@JsonProperty。

 类似资料:
  • 问题内容: 我需要创建一个查询,并且需要和。 我正在解决使用该类的问题,该类是我在某个地方下载的。 这是我尝试实现的SQL: 这是代码,我在其中使用Hibernate类: 错误是: 如果我用类注释该行,则查询工作正常,但是我没有在SQL中获得过滤器… 基本上,查询会尝试在一个主详细信息架构中检索同时显示详细信息列表的所有主记录,例如,如果您想知道“哪些发票同时包含A和B产品”。 这就是为什么如果子

  • 问题内容: 在我正在开发的一个有角度的应用程序中,我希望有一个抽象的父状态,该状态必须解析其所有子状态的某些依赖关系。具体来说,我希望所有要求经过身份验证的用户的状态都必须从某些authroot状态继承该依赖项。 我遇到了无法始终解决父依赖关系的问题。理想情况下,我想让父状态检查用户是否仍自动登录到任何子状态。在文档中,它说 子状态将从父状态继承已解析的依赖项,并可以将其覆盖。 我发现仅当我从父级

  • 问题内容: 什么和何时在hibernate状态下使用DiscriminatorValue注释的最佳方案是什么? 问题答案: 这两个链接帮助我最了解继承概念: http://docs.oracle.com/javaee/6/tutorial/doc/bnbqn.html http://www.javaworld.com/javaworld/jw-01-2008/jw-01-jpa1.html?pag

  • 问题内容: 这段代码失败,并带有指示无效JSON的异常: 我可以通过用空字符串替换所有未定义内容来修复它。undefined不是JSON的一部分吗? 问题答案: 如果您可以解决这个问题,那么 令牌 实际上是未定义的。 请允许我详细说明:即使JavaScript具有称为undefined的特殊原始值,它 也不 是JavaScript关键字,也没有任何特殊含义。通过与定义对象进行比较,可以破坏测试对象

  • 问题内容: 需要使用一对多和多对一关系。这是我对象中的双向关系,因此我可以从任一方向来回移动。是推荐的解决方法,但是,我听不懂。有人可以解释: 推荐的使用方式是什么? 它解决什么目的? 就我的示例而言,这是带有注释的类: 拥有许多 许多 属于一个 A 航空公司: 航空公司航班: 编辑: 数据库模式: AirlineFlights具有idAirline作为ForeignKey,而Airline没有i

  • 问题内容: 我想使用Javascript 解析此内容。数据如下所示: 在线上的每个教程都教您如何使用Twitter解析JSON,但是我不太确定如何使用JSON解析。 我想在一个网站上进行设置,以查看NFL团队在一个有趣的项目中获得的分数,以及有关解析JSON的良好学习体验,因为我不太在乎Twitter的东西。 这可能吗?有什么好的入门教程吗?甚至一些起始代码? 问题答案: 一般来说,您可以使用 J