如何限制Spring data neo4j中@Fetch注解的深度
How to limit the depth of the @Fetch annotation in Spring data neo4j
我知道@Fetch annotation can be used to load nodes on the other sides of relationships。通常,似乎只加载了外部节点的 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) 注释,它完全符合您的要求。
我知道@Fetch annotation can be used to load nodes on the other sides of relationships。通常,似乎只加载了外部节点的 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) 注释,它完全符合您的要求。