`
dadi520
  • 浏览: 145745 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Hibernate 多表查询

 
阅读更多

 

一 、 通过原生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 多表查询 hibernate 多表不同于一般的sql嵌套查询,嵌套查询是不支持的,所以必须要配置好才能实现多表!只要配置好了,还是特别好用的

    Hibernate连表查询 Hibernate连表查询

    根据提供的文件信息,我们可以深入探讨Hibernate中的连表查询方法及其应用。下面将详细介绍与标题、描述及部分代码相关的几个核心知识点: ### Hibernate 连表查询基础 Hibernate 是一个开源的对象关系映射(ORM)...

    hibernate多表联合查询

    ### Hibernate多表联合查询详解 #### 一、引言 在实际项目开发中,我们经常需要处理复杂的数据库查询,特别是涉及到多个表之间的关联查询。Hibernate作为一款流行的Java持久层框架,提供了一种非常便捷的方式来处理...

    Hibernate多表查询.txt

    本文将深入探讨Hibernate中的多表查询技术,解析其背后的原理与实践方法,帮助开发者更好地掌握这一核心技能。 ### Hibernate多表查询概述 在现实世界的应用场景中,数据往往不会孤立存在,而是通过关联分布在多个...

    Hibernate 多表连接分页查询示范项目

    总结,"Hibernate 多表连接分页查询示范项目"是一个实用的示例,它展示了如何在实际应用中利用 Hibernate Criteria API 实现复杂查询和分页,对于学习和掌握 Hibernate 的高级特性和数据库操作技巧非常有帮助。...

    hibernate多表查询[定义].pdf

    在本案例中,我们关注的是Hibernate中的多表查询,这是在处理复杂数据关系时常见的需求。 多表查询涉及到了三个或更多的表之间的关联,这在现实世界的业务场景中很常见,如学生信息与班级信息的关联。在Hibernate中...

    hibernate代码优化基于配置的多表查询

    本文将深入探讨如何通过配置优化Hibernate的多表查询,以提高应用的性能。 1. **联合查询优化**: 在进行多表查询时,Hibernate默认可能会生成多个单表查询,这会导致大量的数据库往返,降低效率。通过配置`@Join...

    Hibernate各种查询:联表查询 分页查询 位置参数查询(?) 占位符查询(冒号查询) 统计查询

    在Hibernate中,可以使用`Criteria` API或者`HQL`(Hibernate Query Language)来实现多表联查。`Criteria` API提供了更加面向对象的查询方式,通过`createCriteria()`方法指定主表,然后使用`createAlias()`方法...

    Hibernate_query查询数据表中的一个字段.

    本篇将详细讲解如何使用Hibernate进行查询,特别是针对数据表中的一个特定字段。 一、Hibernate简介 Hibernate是Java领域的一个开源ORM框架,它简化了数据库操作,通过映射Java类到数据库表,可以将数据库操作转化...

    Hibernate-基础联表模板

    "Hibernate-基础联表模板"是针对Hibernate中联表查询的一个实用工具,旨在帮助开发者快速地进行多表关联查询,而不必记住复杂的SQL语句。 1. **Hibernate简介** Hibernate是一种开源的ORM框架,它允许开发者将Java...

    day36 04-Hibernate检索方式:多表连接查询

    标题中的“day36 04-Hibernate检索方式:多表连接查询”表明这是一个关于Hibernate框架的教程,重点讲解如何在Hibernate中进行多表连接查询。在这个主题中,我们将深入探讨Hibernate的ORM(对象关系映射)机制以及...

    Hibernate多对多关联添加及查询示例

    本示例主要关注的是Hibernate中的多对多关联映射及其添加与查询方法。 多对多关联是数据库设计中的一种常见关系类型,指的是两个实体之间可以存在多个对应关系。例如,在学生与课程的关系中,一个学生可以选修多门...

    hibernate映射和查询

    **hibernate映射与查询** Hibernate 是一个流行的 Java 应用程序开发框架,它提供了一个持久层解决方案,简化了数据库操作。对于初学者来说,理解 Hibernate 的映射和查询机制是至关重要的,因为它们构成了 ...

    struts2+hibernate+spring多表操作示例

    例如,通过Hibernate的 Criteria 或 HQL 查询语言,可以方便地执行多表的JOIN操作。级联保存时,只需要保存父对象,Hibernate会自动保存关联的子对象;级联删除则可以删除父对象时,同时删除所有关联的子对象。 5. ...

    Hibernate的MySql查询.rar

    Hibernate通过提供一个中间层,将Java对象与数据库表进行映射,使得开发者可以使用面向对象的方式来处理数据,而不是传统的SQL语句。这种映射主要由Hibernate的配置文件(hibernate.cfg.xml)和实体类(Entity Class...

    Hibernate基于连接表的一对多单向关联

    总结,"Hibernate基于连接表的一对多单向关联"涉及到的主要知识点包括:数据库设计的一对多关系、Hibernate的实体映射、单向关联的配置、以及如何在Java代码中操作和查询这种关联。理解并熟练应用这些知识点,对于...

    hibernate里面的 两种查询

    - HQL则在处理复杂查询,特别是涉及到多个表关联时,表现更出色,能够更直观地表达业务逻辑。 在实际开发中,可以根据项目需求和团队成员的熟悉程度来选择合适的查询方式。有时,两者结合使用也能发挥更大的优势,...

    hibernate实现动态SQL查询

    例如,我们可以为一个实体类定义多个HQL或SQL查询,根据实际需要选择执行哪一个。 五、FREEMARKER解析 FREEMARKER是一款强大的模板引擎,常用于Web应用中的视图渲染。在Hibernate中,我们可以利用FREEMARKER生成...

    Hibernate查询练习小例子

    利用MYSQL数据库提供的样例数据库world建立的查询小例子。已经建立好了数据库对应的...本项目主要是为了练习使用Hibernate查询数据库。如果有什么问题可以发站内信或者邮件asddf14@hotmail.com。我会尽量解答一下~~~

    Hibernate_query查询数据表中部分字段.

    以上就是使用Hibernate查询数据表中部分字段的方法。在实际应用中,根据项目需求和性能考虑,可以选择合适的方式进行查询。同时,要注意优化查询,避免全表扫描,减少对数据库的压力。学习和熟练掌握这些技术,将有...

Global site tag (gtag.js) - Google Analytics