Java 如何获取列表的值<;地图<;整数,字符串>>;?
Hello community有一个查询,就是我有一个查询,它返回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
列表中的数据
查询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...