提问人:mattsmith5 提问时间:5/2/2021 更新时间:5/2/2021 访问量:18869
@JsonIgnoreProperties({“hibernateLazyInitializer”, “handler”}) 有什么作用?
What does @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) do?
问:
以下这段代码在 Java Sprint Boot 中有什么作用?
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
答:
47赞
Vicky Ajmera
5/2/2021
#1
当你有带有注解的 JPA / Hibernate 实体时,当你使用存储库或使用 getMethod() 从父实体获取数据时,hibernate 返回一个对象,该对象将包含类的所有字段/属性,这些字段/属性映射到 DB 表。在这些字段之上,此对象还将有两个额外的字段,用于延迟加载实体。@Entity
hibernateLazyInitializer
handler
如果您有任何使用 Jackson 库直接或间接以 JSON 字符串格式序列化此实体的用例(也许如果您将实体作为返回到任何 REST API 响应,或者如果您将实体存储到 JSON 数据存储(如 Elasticsearch),JPA 实体将使用所有字段和 和 作为额外字段进行序列化。因此,如果您不忽略这些字段,它们将以 JSON 格式序列化,如果您读取 JSON 字符串,您可以看到该格式。hibernateLazyInitializer
handler
因此,为了避免这种不必要的序列化,您必须在 JPA / Hibernate 实体上编写这段代码,它将告诉 Jackson 库“序列化的 JSON 不应该有字段和 .如果你在对象中找到它们,就忽略它们“:hibernateLazyInitializer
handler
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
评论
1赞
cbmeeks
6/22/2022
很好的解释。我想知道为什么这不是杰克逊的默认行为?
0赞
Vicky Ajmera
6/23/2022
谢谢,@cbmeeks。这不可能是 Jackson 的默认行为,因为它是处理 JSON 的通用库。字段 hibernateLazyInitializer 和 handler 是特定于 hibernate 的字段。因此,通用库没有特定的逻辑来处理另一个库的用例。
0赞
Lukas
11/14/2022
有没有办法全局配置它?
评论