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

时间:2015-05-21 08:06:27

标签: java neo4j spring-data spring-data-neo4j graph-databases

我使用的是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();

}

我有一个想法,我可以扩展一个公共基类,例如带有id和名称的PersistentBaseObject,或者像HasIdAndName这样的接口。不知道我如何整合这个,

1 个答案:

答案 0 :(得分:3)

是的,您可以扩展一个公共基类,也许就像这样 -

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节点将拥有额外的所有者标签。

编辑:

通过将所有者更改为界面可以避免附加标签。 然后,返回所有者集合的存储库上的@Query仍然有用。