如何获取List <map <integer,string =“”>&gt;的值?</map <integer,>

时间:2015-02-01 20:35:39

标签: java hibernate

Hello社区有一个查询,是我有一个查询,它返回List <Map <Integer, String>>

中的数据

查询HQL Hibernate:

@SuppressWarnings({ "unchecked" })
@Transactional(readOnly = true)
@Override
public List<Map<Integer, String>> obtenerPermisosForm(int icodUsu, int icodRol) throws Exception {
    try {
        StringBuilder hql = new StringBuilder();
        hql.append("select new Map(opc.id.icodMaeMenu as icodMaeMenu, ");
        hql.append("opc.videObj as videObj) ");
        hql.append("from Sgmaeopc opc ");
        hql.append("inner join opc.sgmaemenu men ");
        hql.append("inner join men.sgusurol usr ");
        hql.append("inner join usr.sgusuario us ");
        hql.append("inner join usr.sgrol rl ");
        hql.append("where opc.id.icodUsuario = :icodUsu ");
        hql.append("and opc.id.icodRol = :icodRol ");
        hql.append("and men.bactivo = :bactivo ");
        hql.append("and us.bactivo = :bactivo ");
        Query query = super.getSession().createQuery(hql.toString());
        query.setParameter("icodUsu", icodUsu);
        query.setParameter("icodRol", icodRol);
        query.setParameter("bactivo", Constantes.ESTADO_ACTIVO_TRUE);       
        return query.list();
    } catch (Exception e) {
        throw new Exception( getGenerarError(Thread.currentThread().getStackTrace()[1].getMethodName(), 
                             Constantes.NIVEL_APP_DAO,
                             this.getClass().getName(),
                             e.getMessage()) );
    }
}

我尝试以这种方式捕获控制器数据。

List<Map<Integer, String>> permisos = userService.obtenerPermisosForm(getCVariableSesion().getIcodUsu(),
                                                                     getCVariableSesion().getIcodRol());

for(Map<Integer, String> map : permisos) {
    System.out.println("===> "+map+" | "+map.get("videObj"));
}

但我遇到的问题是捕获“icodMaeMenu”描述的整数代码的值

===> {videObj=menuItemMarcas001, icodMaeMenu=14} | menuItemMarcas001
===> {videObj=menuItemMarcas002, icodMaeMenu=14} | menuItemMarcas002
===> {videObj=menuItemMarcas003, icodMaeMenu=14} | menuItemMarcas003
===> {videObj=menuItemMarcas005, icodMaeMenu=14} | menuItemMarcas005

如果我尝试访问 map.get(“icodMaeMenu”),它会生成错误,不会将整数转换为字符串,您应该参考在这种情况下。

2 个答案:

答案 0 :(得分:0)

尝试将List<Map<Integer, String>> permisos更改为List<Map<String, Object>> permisos。看起来你的map的键是一个String,值可以是Integer或String。

答案 1 :(得分:0)

您不是将完全同质的对象存储到该地图中。我会告诉您,您至少要将String作为密钥存储,但值可以是StringInteger

您可以将Map更改为List<Map<String, Object>>。这具有明显的缺点,即您无法准确预测该映射中的确切内容,并且它会强制您根据您正在使用的字符串进行强制转换。

或者,您可以完全抛弃地图并创建某种包装对象,这些对象可以整齐地封装这两个对象,并且无需进行任何转换。

我不会写这个课,因为我不知道它的最佳名称是什么,但我可以给你你需要的HQL片段:

"select new Wrapper(opc.id.icodMaeMenu, opc.videObj)" +
// rest of append here...