Spring Data Neo4j 3.3:PersistentEntityConversionException

时间:2015-05-28 15:33:14

标签: java spring neo4j spring-data-neo4j

希望我的团队在这里做些蠢事,但是,使用SDN 3.3对抗Neo4j 2.1.6时,我在尝试获取特定实体时遇到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。

非常感谢任何协助。

提前致谢!

2 个答案:

答案 0 :(得分:1)

经过多次挖掘后,我找到了问题的原因,并且我承认我觉得自己有点麻烦。

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

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

我最终通过一些SDN代码进行追踪,发现只有当我试图与相关的M类建立这种关系时,事情才会变得混乱。

但是,Leward的上述答案可能会在类似情况下帮助其他人。

答案 1 :(得分:0)

我遇到了同样的问题,看起来像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