为什么在使用 Lazy `@ManyToOne` 时序列化实体用 `content` 包装?

Ala*_*Hay 5 java serialization hibernate jackson spring-data-rest

在 Spring Data Rest 项目中处理延迟加载代理时,使用 Jackson 的Hibernate4Module来处理序列化问题。

一般来说,它解决了 Jackson 尝试序列化未初始化代理的问题,但一个副作用是 JSON 输出不同:

直接获取:api/cases/5400

{
   "id": 5400,
   "practiceReference": "DWPYI9"
}
Run Code Online (Sandbox Code Playgroud)

通过延迟加载的 @ManyToOne 获取:api/submissions/11901/parentCase

{
   "content": {
      "id": 5400,
      "practiceReference": "DWPYI9"
   }
}
Run Code Online (Sandbox Code Playgroud)

通过非延迟加载的 @ManyToOne 获取:api/submissions/11901/parentCase

{
   "id": 5400,
   "practiceReference": "DWPYI9"
}
Run Code Online (Sandbox Code Playgroud)

从上面可以看出,序列化惰性@ManyToOne关联时 JSON 表示有所不同:实体包装在content节点中。

如果关联是非惰性的,则无论路径如何,都会写入相同的表示形式。

这是否有原因,并且可以以某种方式阻止附加的“内容”节点吗?


2017 年 2 月更新:

我在这里找到了相同的(已删除的)问题:

/sf/ask/2323618811/ different-resulting-jsons-when-serializing-lazy-objects-and-simple-objects

这是从这个 github 问题中引用的。另外,这里报告了,所以似乎是一个已知问题: