希望我的团队在这里做些蠢事,但是,使用SDN 3.3对抗Neo4j 2.1.6时,我在尝试获取特定实体时遇到PersistentEntityConversionException。
数据模型如下:
我正在执行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。
非常感谢任何协助。
提前致谢!
答案 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