以下是场景:主要实体类是TreeNode
,它表示树中的节点,因此具有反射关系,如:
@Relationship(type="CHILD_NODE")
List<TreeNode> childNodes;
我想要的是:一个存储库方法,给定根节点的id,返回相应的TreeNode
实体,所有后代节点都加载。即我希望该方法加载无限加载深度的实体。动机是通过这个我可以在控制器中返回根节点,将其渲染为json,如:
{
"id": 1,
"childNodes": [{
"id": 2,
"childNodes": [...]
}, {
"id": 3,
"childNodes": [...]
}]
}
我发现自SDN 4.2以来引入了@Depth
注释,我可以设置depth = -1
来实现我的需要。不幸的是,除了子节点之外,TreeNode
还有其他与之关联的关系,这意味着使用无限深度可能会导致巨大的冗余开销。我只需要树的结构数据。
我还尝试使用带有pattern comprehension的带注释的查询,但这只能返回集合的实体而不是单个实体(根)。当然,我可以将过滤器应用于返回的集合以查找根节点,但我正在寻找更好的解决方案。
提前致谢。