3.2 限制深度
查询动态实体
- Java
- Kotlin
TreeNodeTable table = TreeNodeTable.$;
List<TreeNode> rootNodes = sqlClient
.createQuery(table)
.where(table.parentId().isNull())
.select(
table.fetch(
TreeNodeFetcher.$
.allScalarFields()
.recursiveChildNodes(
cfg -> cfg.depth(2)
)
)
)
.execute();
val rootNodes = sqlClient
.createQuery(TreeNode::class) {
where(table.parentId.isNull())
select(
table.fetchBy {
allScalarFields()
`childNodes*` {
depth(2)
}
}
)
}
.execute()
当前被查询的聚合根被规定为第0层,在其基础上向下查询两层子对象,得到如下的数据
[
{
"id":1,
"name":"Home",
"childNodes":[
{
"id":2,
"name":"Food",
"childNodes":[
{"id":3,"name":"Drinks"},
{"id":6,"name":"Bread"}
]
},
{
"id":9,
"name":"Clothing",
"childNodes":[
{"id":10,"name":"Woman"},
{"id":18,"name":"Man"}
]
}
]
}
]
信息
最深的4个对象,并非表现为childNodes
属性为[]
,而是根本没有childNodes
属性。
这表示,这4个对象是否有下级对象是未知的,因为递归过程因人为干预而被提前终止。
查询静态DTO
静态DTO限制递归深度后续版本提供,请等待后续版本