我正在尝试将我的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可以实现吗?
答案 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);