long companyId, String name, int scope, String primKey)
throws SystemException {
Session session = null;
try {
session = openSession();
String sql = CustomSQLUtil.get(FIND_BY_C_N_S_P);
SQLQuery q = session.createSQLQuery(sql);
q.addScalar("roleName", Type.STRING);
q.addScalar("actionId", Type.STRING);
QueryPos qPos = QueryPos.getInstance(q);
qPos.add(companyId);
qPos.add(name);
qPos.add(scope);
qPos.add(primKey);
Map<String, List<String>> roleMap =
new HashMap<String, List<String>>();
Iterator<Object[]> itr = q.list().iterator();
while (itr.hasNext()) {
Object[] array = itr.next();
String roleName = (String)array[0];
String actionId = (String)array[1];
List<String> roleList = roleMap.get(roleName);
if (roleList == null) {
roleList = new ArrayList<String>();
}
roleList.add(actionId);
roleMap.put(roleName, roleList);
}
return roleMap;
}
catch (Exception e) {
throw new SystemException(e);
}
finally {
closeSession(session);
}
}
其中FIND_BY_C_N_S_P为:
<sql id="cn.ffcs.raptornuke.uum.service.persistence.RoleFinder.findByC_N_S_P">
<![CDATA[
SELECT
Role_.name AS roleName, Permission_.actionId AS actionId
FROM
Permission_
INNER JOIN
Resource_ ON
(Resource_.resourceId = Permission_.resourceId)
INNER JOIN
ResourceCode ON
(ResourceCode.codeId = Resource_.codeId)
INNER JOIN
Roles_Permissions ON
(Roles_Permissions.permissionId = Permission_.permissionId)
INNER JOIN
Role_ ON
(Role_.roleId = Roles_Permissions.roleId)
WHERE
(ResourceCode.companyId = ?) AND
(ResourceCode.name = ?) AND
(ResourceCode.scope = ?) AND
(Resource_.primKey = ?)
ORDER BY
Role_.name ASC
]]>
</sql>