@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) 做什么?

mat*_*th5 21 java spring-boot

下面这段代码在 Java Sprint Boot 中起什么作用?

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
Run Code Online (Sandbox Code Playgroud)

Vic*_*era 48

当您有带@Entity注释的 JPA / Hibernate 实体时,并且当您使用存储库或使用 getMethod() 从父实体中获取从父实体延迟加载的字段的数据库中的数据时,hibernate 返回一个对象,该对象将具有映射到数据库表的类的所有字段/属性。除了这些字段之外,该对象还将有两个额外的字段,分别hibernateLazyInitializer用于handler延迟加载实体。

如果您有任何直接或间接使用 Jackson 库以 JSON 字符串格式序列化此实体的用例(也许您将实体返回到任何 REST API 响应,或者将实体存储到 JSON 数据存储(如 Elasticsearch), JPA 实体将使用所有字段 和hibernateLazyInitializer以及handler作为额外字段进行序列化。因此,如果您不忽略这些字段,它们将以 JSON 格式序列化,如果您读取 JSON 字符串,您就可以看到它们。

因此,为了避免这种不必要的序列化,您必须在 JPA / Hibernate 实体上编写这段代码,这将告诉 Jackson 库“序列化的 JSON 不应包含字段hibernateLazyInitializerhandler。如果您在对象中找到它们,请忽略它们”:

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
Run Code Online (Sandbox Code Playgroud)