使用Hibernate,我如何查询表并返回键值对id> name的hashmap?

Jer*_*nce 11 sql hibernate hql

我有这张桌子:

table name : Account
Fields : id (varchar), name(varchar), other fields...
Run Code Online (Sandbox Code Playgroud)

我想用hibernate机制查询这个表(使用第二个缓存级别).hibernate查询的结果必须是哈希映射,其中键是字段id,值是字段名称.

如何用HQL编写它?

如果我使用map,我只能使用别名,如果我使用带有对象的构造函数,我必须将结果转换为hashmap,这非常耗时.

Example : 
Id | name | other fields
1 Jerome ...
2 Steve ...
3 Nick ...
Run Code Online (Sandbox Code Playgroud)

查询的结果必须是一个hashmap:

1>Jerome
2>Steve
3>Nick
Run Code Online (Sandbox Code Playgroud)

谢谢

tbr*_*aun 13

这个问题很老,但这可能仍然有助于其他人.您现在可以使用HQL返回带有hibernate的映射.使用这样的东西:

select new map( max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n ) from Cat cat
Run Code Online (Sandbox Code Playgroud)

来自hibernate docs:http: //docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html#queryhql-select

  • 大约1年半,我更新我接受的答案!这正是我搜索的内容.这有点太晚了但是有用的信息! (4认同)

sbl*_*ndy 5

我认为你最接近的是使用这个查询:

select id, name from Account
Run Code Online (Sandbox Code Playgroud)

它会给你一个两个长度数组的结果集.您必须手动构建地图,如下所示:

for(Object[] row : rs) {
    map.put(row[0], row[1]);
}
Run Code Online (Sandbox Code Playgroud)

请注意,这将在很大程度上忽略二级缓存并转换为SQL查询.