什么数据问题会导致 "AmbiguousBaseClassException: Multiple classes found in type hierarchy that map to [...]"?

What data issue can cause "AmbiguousBaseClassException: Multiple classes found in type hierarchy that map to [...]"?

显然出乎意料,我的 Springboot/Neo4j 应用程序在启动时开始出现此异常(大约在第一次访问 Neo 时):

AmbiguousBaseClassException: Multiple classes found in type hierarchy that map to [Audit, AppInfo]

尝试各种方法都不成功后,无奈之下我转储了数据库

(含 MATCH (n) DETACH DELETE n

然后重新启动。

突然它又开始工作了。换句话说,这个错误不是(仅仅)由于代码,而是由于数据。

好像被引用的"type hierarchy"是从数据库中读出来的东西,我好像可以"break it".

现在我担心我会突然弹出这个消息,而此时我无法直接转储数据。

那么我怎样才能找出造成这种情况的原因,还有什么更简单的大锤方法可以解决它?

编辑:我最初没有粘贴所涉及结构的细节,因为我希望这是一个 "class" 可以描述、防御和诊断的问题,而不参考我的实例它的。也许这是天真的。

这是错误消息中提到的两个 类:

definition

queries

编辑 2:今天问题再次出现,换了一对。

stack trace

newly affected node class

可能跟什么问题一样。在那个特定的问题中,数据库中的所有 ActorDirector 节点也有 Person 标签。开发人员通过实施 ActorDirector class 来模仿 dual-label 的情况,即子 class 编辑 Person class .因此,当 PersonRepository.findActorsOfMovie() 被调用时,OGM 库不知道是 return SetPerson 个实例还是 Actor 个实例。 PersonRepository.findDirectorOfMovie() 也存在类似的问题。其他方法可能没有类似的问题,导致可能出现间歇性的失败(但实际上是由于不同的用例使用不同的方法)。

您的 class 层次结构可能存在类似问题(关于您的特定数据库数据模型)。如果是这样,您的 OGM 方法签名可能永远不应该使用相关的基础 class.

感谢大家的帮助。已接受的答案是正确的,但列出了一些细节和不同的 "cause",以防其他人像我一样遇到问题...

这是什么:

用 Java/spring-data-neo4j 术语描述,当来自两个 "classes" 的节点以具有相同名称的 "properties" 结束时,确实会出现这种情况。

如何发生:

如果您有两个具有相同 Property 名称的 class,这可能(显然)会发生,如已接受的答案中所述。

但如果您继续使用(在 Java 中)已删除的节点,也会发生这种情况。

被删除的节点就像一个指向已被释放的内存的指针——如果之后继续使用它,结果是不确定的。并且可能导致已删除节点的属性被写入 post-deletion 保存中的其他节点。

如何找到罪魁祸首:

看来你会从错误信息中得到一对class。您所要做的就是从一个 class 中找到另一个具有 属性 的实例。

在 Neo 网络浏览器中,我发现这就像单击属性最少的 class 中的属性一样简单,导致它 运行 "show me instances that have this property" 查询。

我不必遍历输出中的每个结果,因为该应用程序在结果顶部友好地列出了具有此 [= 的节点的数量 和类型 50=]。所以你所做的就是寻找一个导致不止一种类型节点的查询,而罪魁祸首就在那里。

我在过时数据方面遇到了同样的问题。将 ogm lib 从 3.0.X 升级到 3.2.1,问题消失了。