Spring Data Neo4j - 标签未通过继承正确存储

时间:2014-05-07 10:19:09

标签: java neo4j spring-data-neo4j

我有类似这样的类层次结构和相应的存储库:

@NodeEntity
@TypeAlias("BASE")
public class Base {

@NodeEntity
@TypeAlias("Child1")
public class Child1 extends Base {

@NodeEntity
@TypeAlias("Child2")
public class Child2 extends Base {

何时

  1. 我保存了Child1的实例,
  2. 使用Child2Repository.findOne或Neo4jTemplate.findOne方法将其检索为Child2
  3. 使用Child2Repository
  4. 保存

    然后它将正确存储Child2类的属性,但它不会存储Child2类的标签。然后我无法使用Child2Repository.findAll方法找到节点。

    我有以下测试用例

        Child1 child1 = child1Repository.save(new Child1("child1", "prop1"));
    
        Child2 child2 = neo4jTemplate.findOne(child1.getId(), Child2.class);
    
        child2.setProp2("prop2");
        child2Repository.save(child2);
    
        Node node = neo4jTemplate.getNode(child1.getId());
    
        logger.info("Labels: {}", node.getLabels());
        for (String key : node.getPropertyKeys()) {
            logger.info("Property: {}, value: {}", key, node.getProperty(key));
        }
    
        assertThat(baseRepository.findAll().as(List.class).size(), is(1));
        assertThat(child1Repository.findAll().as(List.class).size(), is(1));
        assertThat(child2Repository.findAll().as(List.class).size(), is(1));
    

    输出

    Labels: [BASE, Child1, _Child1]
    Property: prop2, value: prop2
    Property: prop1, value: prop1
    Property: name, value: child2
    

    并在最后一行失败。 这是理想的行为还是错误?或者我做错了什么?

    github上的示例项目:

    https://github.com/frant-hartm/neo4j-examples/

1 个答案:

答案 0 :(得分:0)

您保存了一个带有 prop1 属性的节点,然后您获取了它,为其添加了 prop2 属性并将其保存,因此最终结果是一个有两个节点的节点属性 prop1 prop2