final List <Map<String , Object>> roleList;
final Map<Integer, String> roleMap=new HashMap<Integer, String>();
roleList = getSession()
.createQuery("select Id, Name from Emp where dept=:ref")
.setParameter("ref", "accounts")
.list();
for (Map<String, Object> map2 : roleList)
{
roleMap.put((Integer)(map2.get("Id")), (String)map2.get("Name"));
}
MappingBean.setRoleList(roleMap);
上面的代码显示了类转换异常[Ljava.lang.Object;无法转换为 java.util.Map
。
在Hibernate中有什么方法可以获取Maps列表形式的数据吗?我的roleList
是 map 的形式,我想设置roleList
。
最佳答案
当你做出这样的选择时:
.createQuery("select Id, Name from Emp where dept=:ref")
Hibernate 默认返回 List<Object[]>
,因为这是表示给定字段子集的最安全方法,这些字段绝不一定具有相同的类型(因此,最低公共(public)类被视为 Object
)。
但是,根据情况,您可以通过简单的迭代或使用配置将结果转换为 map 。在我看来,这似乎是徒劳的练习,因为每条记录都将在 key - Value
中返回。已经流行的方式(即使它表示为两个对象的数组)。
直接这样做可以避免这样的开销(更改 roleList
的类型):
for (Object[] role : roleList)
{
roleMap.put((Integer)role[0]), (String)role[1]);
}
Object[]
Hibernate 返回的值尊重所选字段的顺序,因此,在您的情况下,索引 0
对应Id
和1
至Name
.
关于java - 从 hibernate 查询中获取 java.util.map 列表形式的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19382955/