关于Hibernate查询获取多个字段的记录并封装的方法

public Map<String, List<String>> findByC_N_S_P(
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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值