我使用的是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
这样的接口。不知道我如何整合这个,
答案 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仍然有用。