跳到主要内容

3.2 控制节点是否递归

查询动态实体

TreeNodeTable table = TreeNodeTable.$;

List<TreeNode> rootNodes = sqlClient
.createQuery(table)
.where(table.parentId().isNull())
.select(
table.fetch(
TreeNodeFetcher.$
.allScalarFields()
.recursiveChildNodes(cfg -> {
cfg.recursive(it -> {
return !it.getEntity().name().equals("Clothing");
});
})
)
)
.execute();

如果当前树节点的名称等于Clothing则终止递归,否则继续递归。得到如下结果

[
{
"id":1,
"name":"Home",
"childNodes":[
{
"id":2,
"name":"Food",
"childNodes":[
{
"id":3,
"name":"Drinks",
"childNodes":[
{
"id":4,
"name":"Coca Cola",
"childNodes":[]
},
{
"id":5,
"name":"Fanta",
"childNodes":[]
}
]
},
{
"id":6,
"name":"Bread",
"childNodes":[
{
"id":7,
"name":"Baguette",
"childNodes":[]
},
{
"id":8,
"name":"Ciabatta",
"childNodes":[]
}
]
}
]
},
{"id":9,"name":"Clothing"}
]
}
]
信息

Clothing对象并非表现为childNodes属性为[],而是根本没有childNodes属性。

这表示,Clothing对象是否有下级对象是未知的,因为递归过程因人为干预而被提前终止。

查询静态DTO

利用静态DTO控制每个节点是否递归由后续版本提供,请等待后续版本