⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 resobjecthibernate.java

📁 java实现的可配置的工作流引擎,采用jsp+javabean实现
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        // 设置顶层的resID和type
        ResObjectElement roElement = new ResObjectElement(rootResID, getObjectType(session, rootResID));
        try {
            List list = null;
//            if (extendFlag) // true,不论怎样,均向下查找
//                list = session.find("SELECT r FROM ResObjectRela as r WHERE r.id.parent_id=?", new Long(rootResID),
//                        new LongType());
//            else
//                // false,当遇到不继承权限的标志时不再向下查找
//                list = session.find("SELECT r FROM ResObjectRela as r WHERE r.id.parent_id=? and r.is_extend=1",
//                        new Long(rootResID), new LongType());
            if (list != null && !list.isEmpty()) {
                Iterator itr = list.iterator();
                while (itr.hasNext()) {
                    // 取出每个ResObjectRela子对象,转化为一个ResobjectElement
                    ResObjectRela roRelation = (ResObjectRela) itr.next();
                    // 递归调用
                    ResObjectElement oneChildElement = getResObjectElement(session, roRelation.getId().getChild_id(),
                            extendFlag);
                    // 将生成的ResObejctElement作为孩子添加给总的ResObjectElement
                    roElement.addChild(oneChildElement);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw new ResException(errorCode);
        }
        return roElement;
    }

    /**
     * 向上查找父类 parent=true
     *
     * @param rootResID
     * @return
     */
    private ResObjectElement getResObjectElement2(Session session, long rootResID, boolean extendFlag)
            throws ResException {
        int errorCode = ResException.OTHER_DATABASE_ERROR;
        // 设置顶层的resID和type
        ResObjectElement roElement = new ResObjectElement(rootResID, getObjectType(session, rootResID));
        try {
            List list = null;
//            if (extendFlag) // true,不论怎样,均向下查找
//                list = session.find("SELECT r FROM ResObjectRela as r WHERE r.id.child_id=:child_id", new Long(
//                        rootResID), new LongType());
//            else
//                // false,当遇到不继承权限的标志时不再向下查找
//                list = session.find("SELECT r FROM ResObjectRela as r WHERE r.id.child_id=:child_id and r.is_extend=1",
//                        new Long(rootResID), new LongType());
            if (list != null && !list.isEmpty()) {
                Iterator itr = list.iterator();
                while (itr.hasNext()) {
                    // 取出每个ResObjectRela子对象,转化为一个ResobjectElement
                    ResObjectRela roRelation = (ResObjectRela) itr.next();
                    // 递归调用
                    ResObjectElement oneChildElement = getResObjectElement2(session, roRelation.getId().getParent_id(),
                            extendFlag);
                    // 将生成的ResObejctElement作为孩子添加给总的ResObjectElement
                    roElement.addChild(oneChildElement);
                }
            }
        } catch (Exception e) {
            throw new ResException(errorCode);
        }
        return roElement;
    }

    /**
     * 从数据库获取资源管理对象关联对象,并将其层次关系保存于ResObjectElement对象中,返回的 ResObjectElement是最开始的根目录,其ID等于参数中的rootResID.
     *
     * @param rootResID 根目录资源对象ID.
     * @param parent 如果是查找其父类关联则输入true,如果是查找其子类关联则输入false.
     * @param extendFlag 如果输入false,则当遇到不继承权限的标志时不再向下查找;否则继续查找
     * @return 根ResObjectElement
     */
    public ResObjectElement getResObjectElement(Session session, long rootResID, boolean parent, boolean extendFlag)
            throws ResException {

        try {
            if (parent == true)
                return getResObjectElement2(session, rootResID, extendFlag);
            else
                return getResObjectElement(session, rootResID, extendFlag);
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new ResException(ResException.OTHER_DATABASE_ERROR);
        }

    }

    /**
     * 根据用户ID获取组织ID
     *
     * @param userID
     * @return
     * @throws ResException
     */
    public long gerOrgidByUserid(Session session, long userID) throws ResException {

        int errorCode = ResException.OTHER_DATABASE_ERROR;
        long orgId = 0;
        try {
//            List relationList = session.find(ResQuery.LOAD_ORG_BY_USERID, new Long(userID), new LongType());
//            Iterator itr = relationList.iterator();
//            if (itr.hasNext())
//                orgId = ((ResObjectRela) itr.next()).getId().getParent_id();
        } catch (HibernateException e) {
            throw new ResException(errorCode);
        }

        return orgId;

    }

    /**
     * 修改资源对象关联关系,替换原有的关联关系
     *
     * @param parentID 父资源对象ID
     * @param childIDs 子资源对象ID数组
     * @throws ResException
     */
    public void updateAssociate(Session session, long parentID, long[] childIDs) throws ResException {

        try {
            // 1)将父ID为parentID的所有关联删除
//            session.delete(ResQuery.LOAD_RELATION_BY_ID, new Long(parentID), new LongType());

        } catch (HibernateException he) {
        }
        try {

            // 2)加入所有新的关联
            if (childIDs != null) {
                for (int i = 0; i < childIDs.length; i++) {
                    ResObjectRela resObjectRela = new ResObjectRela();
                    ResObjectRe resObjectRe = new ResObjectRe();
                    resObjectRe.setChild_id(childIDs[i]);
                    resObjectRe.setParent_id(parentID);
                    resObjectRela.setId(resObjectRe);
                    resObjectRela.setIs_extend(0);
                    session.save(resObjectRela);
                }

            }
        } catch (HibernateException e) {
            throw new ResException(ResException.RES_NOT_FOUND_ERROR);
        }

    }

    /**
     * 加入一个新的父子关系
     *
     * @param parentID 父资源对象ID
     * @param childIDs 子资源对象ID数组
     * @throws ResException
     */
    public void addAssociate(Session session, long parentID, long childID) throws ResException {
        boolean commit = false;
        try {
            ResObjectRela resObjectRela = new ResObjectRela();
            ResObjectRe resObjectRe = new ResObjectRe();
            resObjectRe.setChild_id(childID);
            resObjectRe.setParent_id(parentID);
            resObjectRela.setId(resObjectRe);
            resObjectRela.setIs_extend(0);
            session.save(resObjectRela);
            commit = true;
        } catch (HibernateException e) {
            throw new ResException(ResException.RES_NOT_FOUND_ERROR);
        }

    }

    /**
     * 从数据库组织相关的 父子关系 因为有可能ResObject有该id,但不是user type,所以只能用User.class
     *
     * @param id 用户资源ID
     */
    public void deleteOrgRela(Session session, long id) throws ResException {
        try {
            // session.delete(ResQuery.LOAD_ORG_BY_USERID, new Long(id), new LongType());
            // session.delete(ResQuery.LOAD_RELATION_BY_ID, new Long(id), new LongType());
        } catch (HibernateException e) {
            throw new ResException(ResException.RES_NOT_FOUND_ERROR);
        }
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -