Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取列表的值<;地图<;整数,字符串>>;?_Java_Hibernate - Fatal编程技术网

Java 如何获取列表的值<;地图<;整数,字符串>>;?

Java 如何获取列表的值<;地图<;整数,字符串>>;?,java,hibernate,Java,Hibernate,Hello community有一个查询,就是我有一个查询,它返回列表中的数据 查询HQL Hibernate: @SuppressWarnings({ "unchecked" }) @Transactional(readOnly = true) @Override public List<Map<Integer, String>> obtenerPermisosForm(int icodUsu, int icodRol) throws Exception { t

Hello community有一个查询,就是我有一个查询,它返回
列表中的数据

查询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()) );
    }
}

如果我尝试访问map.get(“icodMaeMenu”),它会生成一个错误,该错误可能不会将整数强制转换为字符串,在这种情况下,您应该咨询该操作。

尝试将
列表权限
更改为
列表权限
。看起来贴图的键是一个字符串,值可以是整数或字符串。

您没有将完全同质的对象存储到该贴图中。我将告诉您,您至少将
字符串
存储为键,但值可以是
字符串
整数

您可以将
地图
更改为
列表
。这有一个明显的缺点,即您无法准确预测映射中的确切内容,并且它迫使您根据正在使用的字符串进行转换

或者,您可以完全放弃映射,创建某种包装器对象,将这两个对象整齐地封装起来,并且完全不需要执行任何强制转换

我不会编写该类,因为我不知道它的最佳名称是什么,但我可以提供您需要的HQL片段:

"select new Wrapper(opc.id.icodMaeMenu, opc.videObj)" +
// rest of append here...
===> {videObj=menuItemMarcas001, icodMaeMenu=14} | menuItemMarcas001
===> {videObj=menuItemMarcas002, icodMaeMenu=14} | menuItemMarcas002
===> {videObj=menuItemMarcas003, icodMaeMenu=14} | menuItemMarcas003
===> {videObj=menuItemMarcas005, icodMaeMenu=14} | menuItemMarcas005
"select new Wrapper(opc.id.icodMaeMenu, opc.videObj)" +
// rest of append here...