在使用hibernate进行查询时,使用得最多的还是通过构建hql进行查询了。在查询的过程当中,除使用经常的查询对象方法之外,还会遇到查询一个属性,或一组聚集结果的情况。在这种情况下,我们通常就需要对返回的结构进行处理。
一般情况下,我们通过构建hql,并通过设置query的resultTransformer来定制返回结果的类型,一般设置为map属性,如下所示:
Query query = session.createQuery("hql");
query.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP);
来指定查询结果的每一项为一个map。
不过,随着hibernate的发展,可以在hql中直接使用集合查询语句,如list和map了。以下分别介绍使用list和map时的查询语句以及查询结果。首先,数据库的数据如下所示:
mysql> select * from p_dictionary;
+-----------------+----+---------+------+--------+--------+
| dictionary_type | id | version | code | forbid | value |
+-----------------+----+---------+------+--------+--------+
| COUNTY | 1 | 0 | 001 | | 四川 |
| COUNTY | 2 | 0 | 002 | | 北京 |
| COUNTY | 3 | 0 | 001 | NULL | 四川 |
+-----------------+----+---------+------+--------+--------+
3 rows in set (0.00 sec)
以下分别介绍使用list和map的查询语句和查询结果:
使用list
String query = "select new list(p.code,p.value) from Dictionary p";
List list = session.createQuery(query).list();
System.out.println(list);
//结果
[[001, 四川], [002, 北京], [001, 四川]]
使用map,首先不指定alias,则结果的键就按照查询出来的顺序结果,使用0,1来表示key
String query = "select new map(p.code,p.value) from Dictionary p";
List list = session.createQuery(query).list();
//结果
[{1=四川, 0=001}, {1=北京, 0=002}, {1=四川, 0=001}]
使用map,指定alias,则结果中的key则为alias
String query = "select new map(p.code as code,p.value as value) from Dictionary p";
List list = session.createQuery(query).list();
//结果
[{value=四川, code=001}, {value=北京, code=002}, {value=四川, code=001}]
如果部分使用alias,部分不使用,则使用了alias的将使用alias作为key,没有使用的则仍然使用序号代替,其中序号则为在查询结果的序号
String query = "select new map(p.code as code,p.value) from Dictionary p";
List list = session.createQuery(query).list();
//结果
[{1=四川, code=001}, {1=北京, code=002}, {1=四川, code=001}]
转载自:
http://www.iflym.com/index.php/code/use-list-set-map-in-hibernate-query.html
分享到:
相关推荐
### Hibernate中使用SQL而非HQL语句的知识点详解 在Java开发中,Hibernate作为一个...通过以上分析可以看出,在Hibernate中使用原生SQL能够更灵活地处理复杂的数据库查询需求,同时也需要注意安全性和性能方面的考量。
总结来说,"Hibernate SQLQuery 本地查询"这篇博客可能深入介绍了如何在Hibernate中使用SQLQuery执行自定义SQL查询,以及如何通过BaseDaoSupport类来封装这些查询,以提升代码的复用性和项目开发效率。通过对SQL...
Bag和list是反向集合类中效率最高的 19.5.4. 一次性删除(One shot delete) 19.6. 监测性能(Monitoring performance) 19.6.1. 监测SessionFactory 19.6.2. 数据记录(Metrics) 20. 工具箱指南 20.1. ...
8. **集合映射**:Hibernate支持多种集合类型的映射,如List、Set、Map等,用于处理一对多、多对一、多对多的关系。 9. **缓存机制**:Hibernate提供了第一级缓存(Session级别的)和第二级缓存(SessionFactory...
在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,极大地简化了数据库操作。本教程将详细解释如何使用Hibernate将本地SQL查询的结果封装成对象,以便...
在实际应用中,Criteria API常常与DetachedCriteria结合使用,以实现延迟加载和预编译查询,提高性能。DetachedCriteria允许在不持有Session的情况下构建查询,然后在需要时再与Session关联并执行。 综上所述,...
Bag和list是反向集合类中效率最高的 19.5.4. 一次性删除(One shot delete) 19.6. 监测性能(Monitoring performance) 19.6.1. 监测SessionFactory 19.6.2. 数据记录(Metrics) 20. 工具箱指南 20.1. ...
Bag和list是反向集合类中效率最高的 19.5.4. 一次性删除(One shot delete) 19.6. 监测性能(Monitoring performance) 19.6.1. 监测SessionFactory 19.6.2. 数据记录(Metrics) 20. 工具箱指南 20.1. ...
Bag和list是反向集合类中效率最高的 19.5.4. 一次性删除(One shot delete) 19.6. 监测性能(Monitoring performance) 19.6.1. 监测SessionFactory 19.6.2. 数据记录(Metrics) 20. 工具箱指南 20.1. ...
在Java的Hibernate框架中,有时候我们需要执行自定义的SQL查询以获取特定的数据,这时就可以使用SQLQuery接口。本文将深入探讨Hibernate如何通过SQLQuery接口执行原生SQL查询,并展示如何处理查询结果。 一、创建...
11. **Criteria API中的Projections**:用于定义查询结果的返回类型,如sum、avg、count等。 12. **SessionFactory**:是线程安全的,负责创建Session实例,一般在应用启动时初始化一次。 13. **第二级缓存**:...
- Hibernate 支持 List、Set、Map 等多种集合类型映射,通过 @OneToMany 和 @ManyToMany 注解配置关联表和中间表。 9. **延迟加载与立即加载** - 延迟加载(Lazy Loading)在需要时才加载关联对象,节省资源。 -...
3. **Action类的实现**:在你的Action类中,你需要创建返回的list、map或Java类对象。例如,你可以创建一个`List<Map, Object>>`或自定义的Java类`YourJavaClass`对象,并在方法中填充数据。 ```java public ...
1. 在Tomcat中快速上手 1.1. 开始Hibernate之旅 1.2. 第一个持久化类 1.3. 映射cat 1.4. 与Cat同乐 1.5. 结语 2. 架构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. JMX整合 2.4. 对JCA的支持 3. 配置 ...
Bag和list是反向集合类中效率最高的 19.5.4. 一次性删除(One shot delete) 19.6. 监测性能(Monitoring performance) 19.6.1. 监测SessionFactory 19.6.2. 数据记录(Metrics) 20. 工具箱指南 20.1. ...
3. 集合映射:一对多、多对多关系的映射,如Set、List、Map等集合类型的处理。 4. 异步查询:通过Hibernate的FutureResult和Query.listAsync()实现异步数据检索。 5. 动态模型:无需预先定义实体类,可以动态构建...
10. **集合映射**:包括List、Set、Map等多种Java集合类型的映射,方便处理复杂的数据结构。 11. **延迟加载(Lazy Loading)**:为提高性能,Hibernate允许某些关联关系在需要时才加载,避免了不必要的数据库查询...
13. **集合映射**:Hibernate支持多种类型的集合映射,如List、Set、Map等,可以配置一对多、多对一、一对一等关系。 14. **连接池**:为了优化数据库连接管理,Hibernate可以与连接池(如C3P0、DBCP等)集成,提高...
- **集合映射**:支持List、Set、Map等多种集合类型的映射。 - **代理对象**:Hibernate生成的实体对象可能是代理对象,用于延迟加载和拦截操作。 这个中文帮助文档API详细涵盖了上述所有内容,是学习和使用...
`CompanyGroupDaoImpl`类中定义了`list`方法,用于分页查询`Companygroup`实体。 **具体实现步骤:** - 获取Session对象。 - 创建`Criteria`实例,通过`sess.createCriteria(Companygroup.class)`指定查询类型。 -...