首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate爷儿俩Tree

2012-11-11 
Hibernate父子Tree有一次要做一个行业分类的菜单,获取级联关系,由于是个新手,没有这方便的经验,做了很久才

Hibernate父子Tree

有一次要做一个行业分类的菜单,获取级联关系,由于是个新手,没有这方便的经验,做了很久才整出来一个蹩脚的方法,下面展示一下:

数据库:

CREATE?TABLE?`enterprise_type`?(
??`c_id`?int(11)?NOT?NULL?auto_increment?COMMENT?'企业类型编号',
??`c_name`?varchar(100)?NOT?NULL?COMMENT?'企业类型名称',
??`c_parentid`?int(11)?default?NULL?COMMENT?'父类型编号',
??PRIMARY?KEY??(`c_id`),
??KEY?`FK_enterprise_type`?(`c_parentid`)
)?ENGINE=InnoDB?DEFAULT?CHARSET=utf8

?

用Myeclipse的工具生成的实体类为:

?

private List<Integer> getCidList(Integer catId, boolean includeSelf) {        List<Integer> ret = new ArrayList<Integer>();        List<Integer> list = getSubCatList(catId);        ret.addAll(list);        if (!includeSelf) ret.remove(catId);        return ret;    }    /**     * 指定分类ID的所有子节点     *     * @param catId     * @return     */    private List<Integer> getSubCatList(Integer catId) {        List<EnterpriseCategory> allCats = enterpriseCategoryDao.loadAll();        return getSubCatList(catId, allCats);    }    private List<Integer> getSubCatList(Integer cid, List<EnterpriseCategory> allCats) {        Map<Integer, List<Integer>> FK_Parent_Child = new HashMap<Integer, List<Integer>>();        for (EnterpriseCategory cat : allCats) {            // 建立所有带有子节点的节点对应关系            List<Integer> list = FK_Parent_Child.get(cat.getParentId());            if (list == null) {                list = new ArrayList<Integer>();                list.add(cat.getCId());                FK_Parent_Child.put(cat.getParentId(), list);            } else {                list.add(cat.getCId());            }        }        return getSubCats(cid, FK_Parent_Child);    }    private List<Integer> getSubCats(Integer cid, Map<Integer, List<Integer>> FK_Parent_Child) {        List<Integer> nodes = new ArrayList<Integer>();        if (FK_Parent_Child.containsKey(cid)) {            // 非叶子节点            nodes.add(cid);            List<Integer> childNodes = FK_Parent_Child.get(cid);            for (Integer childId : childNodes) {                nodes.addAll(getSubCats(childId, FK_Parent_Child));            }        } else {            // 叶子节点            nodes.add(cid);        }        return nodes;    }
?

可以根据指定的ID获取下面的所有的子节点的id。

记下来,说不定以后会用到。虽然自己写的不怎么的,单也是辛苦的成果,记下来

?

?

?

?

?

热点排行