有没有办法用@Query映射对象图?

时间:2015-06-02 08:42:43

标签: spring-data-neo4j

我正在尝试将我的SDN3嵌入式配置迁移到在服务器模式下使用带有Neo4j实例的SDN 3.3.0(然后通过REST API进行通信)。

当嵌入数据库时​​,对数据库的大量小命中并不是什么大问题,因为Neo4j能够超快地处理这种查询。

但是,现在我将Neo4j与我的应用程序分开运行(即在服务器模式下),由于网络开销,不建议进行大量的小查询。

User user = userRespository.findOne(123); 
user.fetch(user.getFriends());
user.fetch(user.getManager());
user.fetch(user.getAgency());

这将触发相当多的查询,特别是如果我想获取,而不是单个用户,而是一个用户列表。

我可以使用@Query注释并获取用户和相关实体并将其映射到User对象吗?

我在考虑这样的事情:

@Query("MATCH (u:User)-[r:FRIEND]->(f) RETURN u,r,f"

Spring Data Neo4j可以实现这样的功能吗? Spring Data Neo4j 4可以实现吗?

1 个答案:

答案 0 :(得分:1)

您可以使用 @QueryResult 指令为查询结果定义一个类,并让查询方法返回该类的对象,即:

@QueryResult
public interface UserWithFriends {
    @ResultColumn("u")
    User getUser();

    @ResultColumn("f")
    List<User> friends();
}

@Query("MATCH (u:User)-[:FRIEND]->(f) WHERE u.name={name} RETURN u,f")
UserWithFriends getUserByName(@Param("name") String name);