有这么一个业务需求,需要将树节点进行复制,当然也要复制这个节点下的子节点,截图如下:
首先查询出需要复制的所有节点信息:
SELECT T.*,LEVEL GRADE,CONNECT_BY_ISLEAF ISLEAF FROM TABLE1 T START WITH T.ID = 'HT8A57F0B21AFC7061A15BF2F4BC5F4914' CONNECT BY PRIOR T.ID = T.FJID
String strNewJlid = function.newGuid().substring(3, 10);
// 循环修改主键值
for (int i = 0; i < treeList.size(); i++)
{
// 记录序号
String strJlxh = treeList.get(i).get(strTbzj).toString();
// 父级序号
String strFjid = treeList.get(i).get("FJID") == null ? "" : treeList.get(i).get("FJID").toString();
// 层级
String strGrade = treeList.get(i).get("GRADE").toString();
// 修改jlid
treeList.get(i).put(strTbzj, strJlxh.substring(0, 27) + strNewJlid);
if (!"1".equals(strGrade))
{
// 修改父级id
treeList.get(i).put("FJID", strFjid.substring(0, 27) + strNewJlid);
}
}
strNewJlid表示一个8位数的随机数,类似SELECT SYS_GUID() FROM DUAL 查询到的树,只是这个是8位的,treeList表示需要复制的数据,strGrade表示树的层级,1表示第一级。
思路就是用一个8位数的随机数,来替换原先数据的id和fjid中的后八位,来作为新的复制出来的数据