java - 从 hibernate 查询中获取 java.util.map 列表形式的结果

标签 java spring hibernate struts2

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对应Id1Name .

关于java - 从 hibernate 查询中获取 java.util.map 列表形式的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19382955/

相关文章:

java - 使用 XSLT 复制 XML 时绕过命名空间

java - 从 @controller 读取 Spring 配置文件

java - 重构和测试

java - 如何为子项目启用自定义执行器端点?

java - 在启动时进行 DDL 验证时,Hibernate 不使用 @Table。使用 Flyway 和 TestContainers

mysql - 如何处理 org.hibernate.exception.ConstraintViolationException,我使用 try catch 但它不起作用

hibernate - 从JPA的entityManagerFactory获取Hibernate SessionFactory

java - 可嵌入和 ElementCollection 嵌套

java - 使用 Spring 和 HTML5 瓶颈搜索/清理本地视频

java - 哪个工具可以为 javac 的输出着色?