📄 resobjecthibernate.java
字号:
// 设置顶层的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 + -