【发布时间】:2021-07-24 23:19:12
【问题描述】:
下面这段代码在 Java Sprint Boot 中做了什么?
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
【问题讨论】:
标签: java spring-boot
下面这段代码在 Java Sprint Boot 中做了什么?
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
【问题讨论】:
标签: java spring-boot
当您拥有带有 @Entity 注释的 JPA / Hibernate 实体时,并且当您使用存储库从数据库中获取数据或使用父实体中的 getMethod() 获取从父实体延迟加载的字段时, hibernate 返回一个对象,该对象将具有映射到 DB 表的类的所有字段/属性。除了这些字段之外,该对象还将有两个额外的字段hibernateLazyInitializer 和handler,用于延迟加载实体。
如果您有任何直接或间接使用 Jackson 库以 JSON 字符串格式序列化此实体的用例(也许如果您将实体作为它返回到任何 REST API 响应,或者如果您将实体存储到 JSON 数据存储,例如Elasticsearch),JPA 实体将使用所有字段和hibernateLazyInitializer 和handler 作为额外字段进行序列化。因此,如果您不忽略这些字段,它们将被序列化为 JSON 格式,您可以通过读取 JSON 字符串来查看。
因此,为了避免这种不必要的序列化,您必须在 JPA / Hibernate 实体上编写这段代码,这将告诉 Jackson 库“序列化 JSON 不应包含字段 hibernateLazyInitializer 和 handler。如果您在对象,忽略它们”:
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
【讨论】: