我知道@Fetch注释可以用于加载关系另一端的节点。通常,它只显示加载的外部节点的ID,而不是其属性。
有没有办法限制@Fetch的深度,以便只加载第一个邻居,而不加载其他邻居?在一个重连接图中,我们当然不想加载整个图,但为了最大限度地减少对服务器的调用次数,通常在响应中包含第一级连接节点是很有用的。
当前没有办法限制深度,@Fetch
将转到下一个对象,如果该对象再次具有@Fetch
注释,它将继续加载。这样做可能不是最明智的决定,但SDN3目前就是这样。
在SDN4中,您可以选择为加载和存储方法指定深度参数。
我不太喜欢通过域对象导航/加载嵌套结构。
这就是为什么我建议嵌套加载编写一个特定于用例的密码查询来加载所需的数据,并将其投影到DTO中,DTO使用@QueryResult
作为存储库方法的一部分进行注释。
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;
}
Michael,所以在SDN4中,如果您有一个嵌套节点作为模型的一部分,那么我们需要将这些数据唯一地加载到我们的节点中?
(即
class Movie {
@Relationship(type = "mpaa_classification", direction=Relationship.OUTGOING)
Genre genre;
}
一旦我们加载了有问题的电影,我们就需要将类型属性作为一个单独的调用加载?
由于SDN 4.2左右,似乎有一个未记录的@Depth(n)Annotation,它正是您想要的。