一 、 通过原生sQl查询
老外的网站NB啊
http://stackoverflow.com/questions/9197780/hibernate-complex-query-from-multiple-tables-to-one-object
Finally I could solved using this code:
String stringQuery =
"select " +
"CU.Card as card, " +
"CU.Fidely_Code as fidelyCode, "+
"PI.Identity_Card as identityCard, " +
"PI.Name as name, " +
"PI.Surname as surname, " +
"PI.Gender as gender, "+
"AD.Zip as zip, " +
"AD.Geo_Lat as geo_lat, " +
"AD.Geo_Long as geo_long, "+
"CO.City_Geo_Level as cityGeoLevel, "+
"CA.Name as campaignName, "+
"CU.Status as status, "+
"Sum(MO.Charged_Points) as pointsCharged, "+
"Sum(MO.Total_Money) as amountPurchase, "+
"Count(MO.id) as amountTransWinner "+
"from Promotions_Winner WI "+
"join Customers CU "+
"on WI.Customer_id = CU.id "+
"join Personal_Info PI "+
"on CU.Personal_Info_Id = PI.id "+
"join Address AD "+
"on CU.Address_Id = AD.id "+
"join Countries CO "+
"on AD.country_id = CO.id "+
"join Campaigns CA "+
"on CU.Campaign_Id = CA.id "+
"join Movements MO "+
"on WI.Movement_Id = MO.id "+
"where WI.Promotion_Id = :pPromotionID "+
"group by "+
"WI.Customer_Id, CU.Card, CU.Fidely_Code, "+
"PI.Identity_Card, PI.Name, PI.Surname, PI.Gender, "+
"AD.Zip, AD.Geo_Lat, AD.Geo_Long, "+
"CO.City_Geo_Level, "+
"CU.Address_id, CA.Name, "+
"CU.Category_Id, "+
"CU.Status ";
//Query query = this.getSession().createSQLQuery(stringQuery).addEntity("", PromotionsWinnerLittle.class);
//Query query = this.getSession().createSQLQuery(stringQuery).setResultSetMapping("PromotionsWinnerLittle");
Query query = this.getSession().createSQLQuery(stringQuery)
.addScalar("card", StandardBasicTypes.LONG)
.addScalar("fidelyCode", StandardBasicTypes.LONG)
.addScalar("identityCard", StandardBasicTypes.STRING)
.addScalar("name", StandardBasicTypes.STRING)
.addScalar("surname", StandardBasicTypes.STRING)
.addScalar("gender", StandardBasicTypes.STRING)
.addScalar("zip", StandardBasicTypes.STRING)
.addScalar("geo_lat", StandardBasicTypes.BIG_DECIMAL)
.addScalar("geo_long", StandardBasicTypes.BIG_DECIMAL)
.addScalar("cityGeoLevel", StandardBasicTypes.LONG)
.addScalar("campaignName", StandardBasicTypes.STRING)
.addScalar("status", StandardBasicTypes.LONG)
.addScalar("pointsCharged", StandardBasicTypes.BIG_DECIMAL)
.addScalar("amountPurchase", StandardBasicTypes.LONG)
.addScalar("amountTransWinner", StandardBasicTypes.LONG)
.setResultTransformer(Transformers.aliasToBean(PromotionsWinnerLittle.class));
//Query query = this.getSession().createSQLQuery(stringQuery);
query = query.setLong("pPromotionID", promotionID);
List lista = query.list();
-------------------------------------------------------
二 通过 ScrollableResults 查询
Session session = null;
ScrollableResults srs = null;
try{
session = HibernateSessionFactory.openSession();//得到一个Hibernate Session
//下面创建一个匿名Query实例并调用它的scroll()方法返回以ScrollableResults形式组织的查询结果
srs = session.createQuery(“select b.name, count(a.fee) mix(a.chargeBeginTime) max(a.chargeEndTime) from charge a, customer b where a.idCustomer = b.idCustomer and a.chargeBeginTime >= ? and a.chargeEndTime < ? gourp by a.idCustomer“).setDate(0, statTimeBegin).setDate(1, statTimeEnd).scroll();
//将查询结果放入List保存
while(srs.next()){
res.add(new TotalCharge(srs.getString(0), srs,getDouble(1), srs.getDate(2), srs.getDate(3)));
}
三 貌似通过 HQl tuples 查询也可以
try {
002 System.out.println("test..");
003 List list =
004 s
005 .createQuery("select user.id,relation.id from User user,Relationship relation")
006 .list();
007 for (Iterator iter = list.iterator(); iter.hasNext();) {
008 Object[] record = (Object[]) iter.next();
009 System.out.print(record[0] + "---" + record[1]);
010 }
011 s.close();
012 } catch (HibernateException e) {
013 System.err.println(e.getMessage());
014 }
分享到:
相关推荐
hibernate 多表查询 hibernate 多表不同于一般的sql嵌套查询,嵌套查询是不支持的,所以必须要配置好才能实现多表!只要配置好了,还是特别好用的
根据提供的文件信息,我们可以深入探讨Hibernate中的连表查询方法及其应用。下面将详细介绍与标题、描述及部分代码相关的几个核心知识点: ### Hibernate 连表查询基础 Hibernate 是一个开源的对象关系映射(ORM)...
### Hibernate多表联合查询详解 #### 一、引言 在实际项目开发中,我们经常需要处理复杂的数据库查询,特别是涉及到多个表之间的关联查询。Hibernate作为一款流行的Java持久层框架,提供了一种非常便捷的方式来处理...
本文将深入探讨Hibernate中的多表查询技术,解析其背后的原理与实践方法,帮助开发者更好地掌握这一核心技能。 ### Hibernate多表查询概述 在现实世界的应用场景中,数据往往不会孤立存在,而是通过关联分布在多个...
总结,"Hibernate 多表连接分页查询示范项目"是一个实用的示例,它展示了如何在实际应用中利用 Hibernate Criteria API 实现复杂查询和分页,对于学习和掌握 Hibernate 的高级特性和数据库操作技巧非常有帮助。...
在本案例中,我们关注的是Hibernate中的多表查询,这是在处理复杂数据关系时常见的需求。 多表查询涉及到了三个或更多的表之间的关联,这在现实世界的业务场景中很常见,如学生信息与班级信息的关联。在Hibernate中...
本文将深入探讨如何通过配置优化Hibernate的多表查询,以提高应用的性能。 1. **联合查询优化**: 在进行多表查询时,Hibernate默认可能会生成多个单表查询,这会导致大量的数据库往返,降低效率。通过配置`@Join...
在Hibernate中,可以使用`Criteria` API或者`HQL`(Hibernate Query Language)来实现多表联查。`Criteria` API提供了更加面向对象的查询方式,通过`createCriteria()`方法指定主表,然后使用`createAlias()`方法...
本篇将详细讲解如何使用Hibernate进行查询,特别是针对数据表中的一个特定字段。 一、Hibernate简介 Hibernate是Java领域的一个开源ORM框架,它简化了数据库操作,通过映射Java类到数据库表,可以将数据库操作转化...
"Hibernate-基础联表模板"是针对Hibernate中联表查询的一个实用工具,旨在帮助开发者快速地进行多表关联查询,而不必记住复杂的SQL语句。 1. **Hibernate简介** Hibernate是一种开源的ORM框架,它允许开发者将Java...
标题中的“day36 04-Hibernate检索方式:多表连接查询”表明这是一个关于Hibernate框架的教程,重点讲解如何在Hibernate中进行多表连接查询。在这个主题中,我们将深入探讨Hibernate的ORM(对象关系映射)机制以及...
本示例主要关注的是Hibernate中的多对多关联映射及其添加与查询方法。 多对多关联是数据库设计中的一种常见关系类型,指的是两个实体之间可以存在多个对应关系。例如,在学生与课程的关系中,一个学生可以选修多门...
**hibernate映射与查询** Hibernate 是一个流行的 Java 应用程序开发框架,它提供了一个持久层解决方案,简化了数据库操作。对于初学者来说,理解 Hibernate 的映射和查询机制是至关重要的,因为它们构成了 ...
例如,通过Hibernate的 Criteria 或 HQL 查询语言,可以方便地执行多表的JOIN操作。级联保存时,只需要保存父对象,Hibernate会自动保存关联的子对象;级联删除则可以删除父对象时,同时删除所有关联的子对象。 5. ...
Hibernate通过提供一个中间层,将Java对象与数据库表进行映射,使得开发者可以使用面向对象的方式来处理数据,而不是传统的SQL语句。这种映射主要由Hibernate的配置文件(hibernate.cfg.xml)和实体类(Entity Class...
总结,"Hibernate基于连接表的一对多单向关联"涉及到的主要知识点包括:数据库设计的一对多关系、Hibernate的实体映射、单向关联的配置、以及如何在Java代码中操作和查询这种关联。理解并熟练应用这些知识点,对于...
- HQL则在处理复杂查询,特别是涉及到多个表关联时,表现更出色,能够更直观地表达业务逻辑。 在实际开发中,可以根据项目需求和团队成员的熟悉程度来选择合适的查询方式。有时,两者结合使用也能发挥更大的优势,...
例如,我们可以为一个实体类定义多个HQL或SQL查询,根据实际需要选择执行哪一个。 五、FREEMARKER解析 FREEMARKER是一款强大的模板引擎,常用于Web应用中的视图渲染。在Hibernate中,我们可以利用FREEMARKER生成...
利用MYSQL数据库提供的样例数据库world建立的查询小例子。已经建立好了数据库对应的...本项目主要是为了练习使用Hibernate查询数据库。如果有什么问题可以发站内信或者邮件asddf14@hotmail.com。我会尽量解答一下~~~
以上就是使用Hibernate查询数据表中部分字段的方法。在实际应用中,根据项目需求和性能考虑,可以选择合适的方式进行查询。同时,要注意优化查询,避免全表扫描,减少对数据库的压力。学习和熟练掌握这些技术,将有...