如何在Spring数据neo4j中限制@Fetch注释的深度

时间:2015-04-01 11:54:51

标签: neo4j spring-data-neo4j

我知道@Fetch annotation can be used to load nodes on the other sides of relationships。通常,只显示加载外部节点的ID,而不是其属性。

有没有办法限制@Fetch的深度,以便只加载第一个邻居,而不再加载?在高度连接的图形中,我们当然不想加载整个图形,但是为了最小化回到服务器的调用次数,通常它对于第一级连接节点是有用的。包含在回复中。

3 个答案:

答案 0 :(得分:2)

目前没有办法限制深度,@Fetch继续下一个对象,如果那个再次有@Fetch注释,它将继续加载。这可能不是最明智的决定,但这是目前在SDN3中的方式。

在SDN4中,您可以选择为加载和存储方法指定深度参数。

我不是通过域对象导航/加载嵌套结构的忠实粉丝。

这就是为什么我宁愿推荐嵌套加载来编写用例特定的密码查询来加载您需要的数据并将其投影到以@QueryResult注释为DTO的DTO中存储库方法的一部分。

interface MovieRespository extends GraphRepository<Movie> {
    @Query("MATCH (n:Actor)-->(m:Movie) return n.name as name,collect(m.title) as titles")
    List<Filmography> listFilmographies(Pageable page);
} 
@QueryResult class Filmography {
   String name;
   List<String> titles;
}

答案 1 :(得分:0)

迈克尔,所以在SDN4中,如果你有一个嵌套节点作为模型的一部分,那么我们需要将这些数据唯一地加载到我们的节点上?

(即

class Movie {

 @Relationship(type = "mpaa_classification", direction=Relationship.OUTGOING)
 Genre genre;
}

我们需要在加载有问题的电影时将类型属性加载为单独的调用吗?

答案 2 :(得分:0)

自SDN 4.2左右以来,似乎存在一个未记录的@Depth(n)注释,它确实可以满足您的需求。