我正在尝试从数据库中加载父/子对象的图形(类似于Java的DefaultMutableTreeNode对象)。 2之间有一个简单的一对多关联。该图的级别总数已知,因此我确切知道多少次调用“ getChildren()”方法。
我要做的是不为实际的叶子节点调用此方法。通常,该图由几个非叶节点和数百个叶节点组成。如果我在hb映射中指定lazy=false
,则会从hb中为叶节点的子节点获得数百个不必要的查询,而我事先知道它们是不需要的(因为我知道树上的级别总数)。
不幸的是,我无法使用lazy=true
并只能循环到叶节点的父节点,因为我正在处理断开连接的客户端/服务器模型,并使用beanlib加载整个对象图(其中包含其他几个对象)。
因此,我试图找到一种方法来拦截“子项”集合的加载,并指示hb在到达叶节点时停止。有没有办法做到这一点?
我正在寻找2个解决方案:
我要记住的是:当我在hb会话中调用node.getChildren()
方法时,通常hb将执行db查询以获取子级:有没有办法拦截此调用而不是不进行?我知道没有孩子,所以我只想让它快速失败(实际上我根本不想这么做)。
谢谢
科斯塔斯
最佳答案
为什么不只使用布尔值leaf
属性,如果getChildren
为true,则使您的leaf
方法返回一个空列表?
private boolean leaf;
private List<Node> children;
public List<Node> getChildren() {
if (leaf) {
return Collection.<Node>emptyList();
}
return children;
}