Spring Data Neo4j:如何提取我不知道其类型的节点列表?

Spring Data Neo4j: How do I pull a list of nodes of which I do not know the type?

我正在使用 Spring Data Neo4j,我想提取一个所有者列表。所有者可以是 :Person(人)或 :Entity(公司)。我不确定 Type<T> 应该是什么。我可以在 GraphRepository<Type> 界面中使用。

我的查询是:

MATCH ()-[r:OWNED_BY]->(o) RETURN

这是我试过的代码:

public interface Owners extends GraphRepository<Object> {

    @Query("start o=MATCH ()-[r:OWNED_BY]->(o) RETURN o;")
    Iterable<Object> getOwners();

}

我有一个想法,我也许可以扩展一个公共基础 class,例如 PersistentBaseObject 带有 id 和名称,或者像 HasIdAndName 这样的接口。虽然不确定我将如何整合它,

是的,你可以扩展一个公共基础 class,也许像这样-

public class Owner {

    Long id;
   String name;
...
}

public class Person extends Owner {

    private int age;
...
}
public class Entity extends Owner {

    private String location;
...
}

并为所有者添加一个匹配的存储库

public interface OwnerRepository extends GraphRepository<Owner> {

}

这将允许您执行 ownerRepository.findAll() 等操作 但是因为你使用的是@Query,所以你没有理由不能把这个方法放在 PersonRepository 上(至少在 SDN 4 中。我不确定 SDN 3.x)

 @Query("start o=MATCH ()-[r:OWNED_BY]->(o) RETURN o;")
 Iterable<Owner> getOwners();

但是请注意,现在您的 Person 和 Entity 节点将有一个额外的 Owner 标签。

编辑:

可以通过将所有者更改为接口来避免附加标签。 那么返回所有者集合的存储库上的@Query 应该仍然有效。