Spring 数据 Neo4j 3.3:PersistentEntityConversionException

Spring Data Neo4j 3.3: PersistentEntityConversionException

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

数据模型是这样的:

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

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

我得到查询,然后遍历结果,并使用模板 "fetch" 结果。最终,我得到了这个例外:

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 中有效。

如有任何帮助,我们将不胜感激。

提前致谢!

我遇到了同样的问题,看起来像是 Spring Data Neo4j 中的错误。

我找到了一个解决方法来让它工作:在 Spring Data Neo4j 中禁用类型安全检查。

在您的 Spring XML 上下文中,只需添加:

<bean id="typeSafetyPolicy" class="org.springframework.data.neo4j.support.typesafety.TypeSafetyPolicy">
    <constructor-arg value="NONE" />
</bean>

请记住,这会产生不良的副作用。请参阅文档:http://docs.spring.io/spring-data/data-neo4j/docs/3.3.0.RELEASE/reference/html/#entity_type_safety

经过更多的挖掘,我找到了我的问题的原因,我承认我觉得自己有点傻。

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

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

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

不过,Leward 的上述回答可能对其他类似情况的人有所帮助。