`

hibernate的hql语句中in的用法

阅读更多

有一次遇到需要在hql语句里用到in了,上一次查了半天也没搞定,最后索性用and、and、and代替了,但这次in()集合是需要SQL查出来的id集合,没办法,再次研究。

本着抄袭要注明出处的原则,我参考的博客是:http://blessht.iteye.com/blog/1051421

 

先写我的报错的hql语句,我的原语句是“from Member where delFlag = 0 and memberNo in (from ArmyMember am where armyNo = :armyNo ) ”

 

DB2报的异常是:

com.ibm.db2.jcc.c.SqlException: DB2 SQL error: SQLCODE: -401, SQLSTATE: 42818, SQLERRMC: IN

写到这里,我发现其实我只要这样写就不会错了!囧~~~ hql:
“from Member where delFlag = 0 and memberNo in (select am.memberNo  from ArmyMember am where armyNo = :armyNo ) ”

撇开我的粗心不说,我的解决方案是分两步查询:
第一步:先查出一个list集合
在manager层里分两步写:
    public ArrayList<RescueMember> findMembers(String armyNo) {
        //查询in里的集合
        ArrayList<String> memberNos = new ArrayList<String>();
        ArrayList<ArmyMember> memberNoList  = teamMemSumDao.findMemberNos(armyNo);
      //封装一个list<String>集合
        for (ArmyMember armyMember : memberNoList) {
            memberNos.add(armyMember.getMemberNo());
        }
       //查询把list作为参数传递给dao层
        return teamMemSumDao.findMembers(memberNos);
    }

dao层代码:
        //查询in里的集合
    public ArrayList<ArmyMember> findMemberNos(String armyNo) {

        StringBuffer hql = new StringBuffer("from ArmyMember where armyNo = :armyNo ");

        Session session = sessionFactory.getCurrentSession();
        Query query = session.createQuery(hql.toString());
        query.setParameter("armyNo", armyNo);

        return (ArrayList<ArmyMember>) query.list();
    }


第二步:把需要作为in()参数的list<String> 集合传递给dao

      //hql语句带in的方法
    public ArrayList<RescueMember> findMembers(ArrayList<String> memberNos ) {

        StringBuffer hql = new StringBuffer("from RescueMember where delFlag = 0 and memberNo in (:memberNos ) ");

        Session session = sessionFactory.getCurrentSession();
        Query query = session.createQuery(hql.toString());
        query.setParameterList("memberNos", memberNos);

        return (ArrayList<RescueMember>) query.list();
    }




重点:query对象的设置参数有很多方法,如果参数是集合,就调用query.setParameterList() 方法。
看下图:



 








PS:要善于起别名
   对于用left join 多表查数据,如果没有别名,hibernate不会区分两个名字相同的字段,会导致查询后封装list数据出错,因此要经常取别名。












  • 大小: 44.9 KB
分享到:
评论

相关推荐

    常用的hql语句用法解析

    本文将深入解析HQL语句的常见用法。 1. 大小写敏感性 HQL对Java类和属性的名称是大小写敏感的,但在关键字和表名方面,除了类名和属性名之外,HQL不区分大小写。因此,`SeLeCT`、`sELEct`和`SELECT`被视为相同,但`...

    HQL语句大全HQL语句大全

    - 如果HQL语句中有参数,则需要为这些参数设置值。 ```java query.setParameter("eventTitle", "测试事件"); ``` 5. **执行查询并处理结果** - 调用Query对象的`list()`方法来执行查询,并返回一个包含查询...

    HQL语句的用法

    HQL(Hibernate Query Language)是Hibernate框架中用于对象关系映射(ORM)的查询语言,它允许开发者以面向对象的方式来编写查询,而不是传统的SQL。HQL的设计目标是与Java等面向对象的语言更加兼容,支持类、接口...

    HibernateHQL.zip_更新

    此压缩包中的`HibernateHQL.chm`文件很可能是Hibernate HQL的详细教程或参考手册,包含了HQL的语法、用法示例、最佳实践以及可能遇到的问题解决方案。它可以帮助开发者深入理解如何在实际项目中高效地使用HQL进行...

    HibernateHql综合测试小程序

    本程序“HibernateHql综合测试小程序”是针对Hibernate中的HQL(Hibernate Query Language)进行的一系列功能测试,涵盖了二十多种不同的HQL语句,旨在帮助开发者深入理解和熟练运用Hibernate的查询能力。...

    Hibernate HQL.txt

    Hibernate HQL是一种面向对象的查询语言,它允许开发人员以一种更加自然的方式来表达数据库查询,而无需直接编写SQL语句。HQL提供了类似于SQL的强大查询能力,但更符合面向对象编程的思维方式,这使得它在处理持久化...

    精通hibernate HQL语言

    例如,如果我们想要获取`Student`类的所有实例,可以使用如下HQL语句: ```java String hql = "from Student"; List&lt;Student&gt; students = session.createQuery(hql).list(); ``` 这里的`session.createQuery()`...

    常用的HQL语句下载

    在示例中,第4行的HQL语句`update PhUser set realName=?`用于更新`PhUser`表中所有记录的`realName`字段。第5行的`setString(0, "小李想")`将`?`替换为字符串"小李想",然后执行`executeUpdate()`来执行更新操作。 ...

    Hibernate 经常用的一些HQL语句

    标题:“Hibernate 经常用的一些HQL语句” 描述:“可以让我们更方便的学习Hibernate” ### HQL(Hibernate Query Language)在Hibernate中的应用 HQL是Hibernate框架提供的查询语言,它允许开发者以面向对象的...

    HQL语句详解Select/update/deletefromwhere...

    需要注意的是,在Hibernate中查询时,如果实体之间存在继承关系(如`Employee`类继承自`HourlyEmployee`和`SalariedEmployee`),则可以通过类似`"from Employee"`这样的HQL语句来查询基类`Employee`的所有子类实例...

    hql语句查询

    ### HQL语句查询知识点详解 #### 一、HQL简介 HQL(Hibernate Query Language)是Hibernate框架中...以上就是关于HQL语句查询的一些基础知识点,掌握了这些基本用法后,就可以更加灵活地使用HQL来处理各种查询需求了。

    hql基础语句

    HQL(Hibernate Query Language)是Hibernate框架中用于操作对象关系映射(ORM)的查询语言,它是SQL的面向对象版本,使得开发者可以更方便地在Java应用中进行数据库查询。本教程将深入讲解HQL的基础语句,包括ID...

    学习HQL语句

    HQL(Hibernate Query Language)是一种面向对象的查询语言,建立在面向对象的基础上。它提供了类SQL查询的功能,但查询目标是对象,而不是记录。HQL 拥有面向对象语言的所有特性,包括多态、继承和组合。 一、投影...

    hql语句 使用大全

    当需要同时查询多个字段时,可以在HQL语句中指定这些字段,并通过索引来访问这些字段值: ```java String hql = "select u.name, u.age from com.mypack.User4 u"; Query query = session.createQuery(hql); List ...

    hibernate hql大全

    HQL支持多种条件语句,如`WHERE`、`AND`、`OR`、`BETWEEN`、`IN`、`LIKE`等。例如: ```java from Employee e where e.name like 'John%' and e.age &gt; 30 ``` 这将返回名字以"John"开头且年龄大于30的所有员工。 #...

    hql语句经典教程

    【HQL语句经典教程】 Hibernate Query Language(HQL)是Hibernate框架提供的面向对象的查询语言,它在外观上类似于SQL,但具有显著的面向对象特性,如支持继承、多态和关联。本教程将深入讲解HQL的基本概念、用法...

    Hibernate-HQL-查询-Query资料

    - "HQL语句(结合实例).doc"则可能提供了具体的查询示例,帮助读者更好地理解和应用HQL。 通过学习这些文档,开发者可以掌握如何在Hibernate项目中高效地利用HQL进行数据查询,提升开发效率,同时保持代码的简洁...

    Hibernate数据检索(HQL)笔记

    对于初学者来说,掌握 HQL 的基本用法是非常重要的,这有助于更好地理解和应用 Hibernate 框架。 通过学习这些示例,我们可以更深入地理解如何使用 HQL 进行数据检索,并将其应用于实际项目中,提高开发效率和程序...

    常用的HQL语句!!!!

    以下是一些常见的HQL语句及其用法: 1. **HQL更新**: 更新操作通常涉及到设置对象的属性并保存更改。例如,以下HQL语句用于将`PhUser`类中的某个用户的`realName`属性改为"小李想": ```java String hql = ...

Global site tag (gtag.js) - Google Analytics