【问题标题】:Spring Data Neo4j 3.3: PersistentEntityConversionExceptionSpring Data Neo4j 3.3:PersistentEntityConversionException
【发布时间】:2015-08-11 05:24:16
【问题描述】:

希望我的团队在这里做一些愚蠢的事情,但是,使用 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 中工作。

任何帮助将不胜感激。

提前致谢!

【问题讨论】:

    标签: java spring neo4j spring-data-neo4j


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 谢谢。也许 Michael Hunger 或其他人可以对此发表评论?如果没有其他结果,我会将其标记为答案。
      • 好吧,这解决了问题,但引入了另一个问题,即通过特定抽象对象的实例进行检查。可能是您上面提到的副作用。
      猜你喜欢
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多