问题描述
我在从 Spring Boot 2.0.8 升级到 2.3.11/Spring Data Neo4j 5.0.13 到 5.3.9 时遇到问题。
我有一个包含 CRUD 操作的 REST API,用于我的实体,并使用 Jackson ObjectIdResolver
来解析传入 JSON 请求中 id 的相关实体。实体有一个 UUID 类型的自定义 id 字段,解析器使用 Neo4j 存储库通过 UUID 键查找实体。
就我而言,有 3 个实体是相关的:
(A)--(B)--(C)
A
的列表为 B
,B
的列表为 C
。 POST
创建新的 C
:
{
"name": "My C","b": "c3c9ec23-ff05-4295-9b5b-209af08328ac"
}
B
的解析器将查找实体并填充我的 C
实例。如果我在资源中为 findById
执行特定的 B
,我会得到与解析器相同的实例 - 这正是我想要的。
现在,当升级到 Spring Data 5.3.9 时,我得到了不同的结果。在 rest 控制器中的新查找将返回表示解析器加载的相同实体的第二个实例 - 具有相同的 ID 和 UUID。似乎解析器加载的实例不在映射上下文中。这会导致保存出现问题,因为 C
引用了不在上下文中的实例,并且通常会导致关系被删除。
具体来说,解析器加载的实例B
有一个A
的实例,但是A
没有完全加载(B
的列表只包含一个实例,其他的没有加载)。在其余控制器中查找 A
将返回一个完全加载 B
列表的实例。使用来自解析器的 C
引用保存新的 B
将导致 A
和 B
之间的关系被删除。
如何从解析器获取实例到映射上下文中?还是我在这里做错了什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)