希望我的团队在这里做一些愚蠢的事情,但是,使用针对Neo4j 2.1.6的SDN 3.3,尝试获取特定实体时出现PersistentEntityConversionException。

数据模型如下所示:


有一个基础节点实体模型,称为A。它是SDN中的抽象模型(它实际上是从其他几个类派生而来,但其根是@NodeEntity)。
有两个同级实体,每个同级实体都源自A。将它们称为B和C。


我正在执行一个Cypher查询,该查询可以有效地查找带有A标签的节点(应包含B和C)。 Java代码看起来像这样:

List<A> nodeList = this.repo.getNodes();


我返回查询,然后遍历结果,并使用模板“获取”结果。最终,我得到了这个异常:

org.springframework.data.neo4j.mapping.PersistentEntityConversionException: Requested a entity of type 'class B', but the entity is of type 'class C'.


这种获取方法曾经在SDN 3.2.1中起作用。

任何帮助将不胜感激。

提前致谢!

最佳答案

经过进一步的挖掘后,我找到了问题的原因,并且我承认我感觉有点像涂料。

实际上,领域中的模型比我发布的模型要复杂一些(也更深一些)。对我而言,问题归结为需要将enforceTargetType设置为true并将elementClass设置为目标类型。

换句话说,我的A类与另一个模型(称为M)有关系,并且该关系没有正确标注。

我最终通过大量的SDN代码进行了跟踪,发现只有当我试图与关联的M类建立这种关系时,事情才变得混乱。

尽管如此,在类似情况下,Leward的上述回答可能会对其他一些人有所帮助。

09-28 12:54