Neo4J OGM Session.load(ID)返回现有ID的null对象

时间:2017-06-01 10:29:06

标签: java neo4j cypher neo4j-ogm

我正在进行一些Neo4J测试并遇到以下特殊问题。我创建了一个小模型,我打算与OGM一起使用。该模型具有超类Entity和子类Child。它们都在包persistence.model中。实体具有匹配的Long id; getter所需的getId()

public abstract class Entity {
   private Long id;
   public Long getId() {
      return id;
   }
}

@NodeEntity
Child extends Entity {
   String name;
   public Child() {
   }
}

创建Child对象并通过OGM持久化它们可以正常工作。我基于文档中的示例并使用Neo4jSessionFactory对象,该对象使用包persistence.model初始化SessionFactory。生成的数据库包含填写了正确ID的对象。

当我尝试为给定ID获取Child时出现问题。我正在尝试三种方法,使用两个连接系统( bolt ogm ):

boltSession.run("MATCH (a:Child) WHERE id(a) = {id} RETURN a", parameters("id", childId));

ogmSession.query("MATCH (a:Child) WHERE id(a) = $id RETURN a", params);

ogmSession.load(Child.class, childId, 1);

前两种方法实际上返回正确的数据。最后一个返回null值。最后一个,使用OGM,有一些明显的好处,我希望能够正确使用它。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

在您的测试代码中,您正在按int类型的ID进行查找。

private int someIdInYourDatabase = 34617;

Neo4j中的内部ID是Long类型。

如果您将ID的类型更改为longLong,那么它将有效。

private long someIdInYourDatabase = 34617;