Spring Data Neo4j中@Relationship注解如何对关联结果排序?
@Relationship 关联实体排序规则说明
- 默认排序逻辑:
@Relationship注解本身不提供内置默认排序规则,直接通过注解映射得到的关联节点列表,顺序完全和底层图数据库执行查询时的返回顺序一致,没有固定排序保障,业务逻辑不要依赖这个隐式顺序。 - 自定义排序是完全支持的,常用实现方案有两种:
- 自定义Cypher查询显式排序:在对应Repository中编写自定义查询语句,匹配到
CREATED关系后,直接在Cypher中用ORDER BY子句按你指定的关系属性、排序规则排序后再返回映射,参考示例:@Query("MATCH (src:你的主节点类型)-[r:CREATED]->(target:Node) WHERE id(src) = $mainNodeId " + "WITH target, r ORDER BY r.你要排序的关系属性 DESC " + "RETURN collect(target) as nodes") List<Node> listSortedCreatedNodes(Long mainNodeId); - 加载后内存排序:如果不希望自定义查询语句,可以在实体加载完成后,在业务代码层遍历
nodes关联集合,基于提前查询出的关系属性做内存排序即可,使用这种方式需要确保查询时把你需要用于排序的关系属性一并查出,避免属性缺失导致排序失败。
- 自定义Cypher查询显式排序:在对应Repository中编写自定义查询语句,匹配到
- 注意事项:只要没有显式写排序逻辑,映射得到的关联节点顺序随时可能因为数据增删、数据库存储结构调整发生变化,生产环境使用必须显式指定排序规则,才能保证顺序符合业务预期。
内容的提问来源于stack exchange,提问作者Shy Albatross
相关产品推荐
相关产品推荐

